day05_java中常见的运算符
对字面量或者变量进行操作的符号就是运算符。用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
java中常用的运算符有下面几种
算术运算符
代码示例
public class Demo01Operator {public static void main(String[] args) {int a = 3;int b = 4;System.out.println(a + b);// 7System.out.println(a - b);// -1System.out.println(a * b);// 12//整数相除 不保留小数System.out.println(a / b);// 0//如果想要显示小数 使用浮点类型计算System.out.println((double) a / b);// 0.75//商*除数 + 余数 = 被除数System.out.println(a % b);// 3}
}
经典案例
public class Test {public static void main(String[] args) {//定义一个四位数 int number = 1234;//通过运算操作求出个位,十位,百位,千位System.out.println(number + " 这个四位数个位上的数字是:" + (number % 10));System.out.println(number + " 这个四位数十位上的数字是:" + (number / 10 % 10));System.out.println(number + " 这个四位数百位上的数字是:" + (number / 100 % 10));System.out.println(number + " 这个四位数千位上的数字是:" + (number / 1000 % 10));}
}
注意事项:
- / 和 % 的区别:两个数据做除法,/ 取结果的商,%取结果的余数
- 整数操作只能得到整数,要想得到小数,必须有浮点数参与运算
- 求余运算,余数的符号只看被除数
“+”号的两种用法
-
第一种:对于+两边都是数值的话,
+
就是加法的意思
System.out.println(1+2);//3
System.out.println(1+'a');//98
-
第二种:对于
+
两边至少有一边是字符串得话,+
就是拼接的意思,其结果依然是一个字符串
String str = "Java";
// String + int --> String
System.out.println(str + 520); // Java520// String + int + int --> String + int-->String
System.out.println(str + 5 + 20); // Java520
默认情况下是从左到右进行运算,我们可以使用小括号来调整运算顺序
//默认情况下,从左到右
System.out.println("1" + 2 + 3);//123
//小括号里的先算
System.out.println("1" + (2 + 3));//15
自加自减运算
- ++ 和 -- 既可以放在变量的后边,也可以放在变量的前边
- ++ 、-- 只能操作变量,不能操作字面量的
单独使用
单独使用的时候, ++和-- 无论是放在变量的前边还是后边,结果是一样的
- 变量前++ :例如 ++a
- 变量后++ :例如 a++
public class Demo03Operator {public static void main(String[] args) {// 定义一个int类型的变量aint a = 3;//变量前++和变量后++,变量的结果是一样的;++a;System.out.println(a);//4a++;System.out.println(a);//5}
}
复合使用
++、--如果不是单独使用(如在表达式中、或者同时有其它操作),放在变量前后会存在明显区别
- 放在变量的前面,先对变量进行+1、-1,再拿变量的值进行运算
- 放在变量的后面,先拿变量的值进行运算,再对变量的值进行+1、-1
public class Demo04Operator {public static void main(String[] args) {// 其他变量放在一起使用int x = 3;int y = x++;System.out.println(x);//4System.out.println(y);//3System.out.println("==========");// 和输出语句一起int z = 5;System.out.println(z++);//5System.out.println(z);//6}
}
赋值运算符
基本赋值运算符:就是“ = ”
int a = 10; // 先看“=”右边,把数据10赋值给左边的变量a存储。
扩展赋值运算符
代码示例
public class Demo04Operator {public static void main(String[] args) {short s = 10;/*s = s + 10; 此行代码报出,因为运算中s提升为int类型,运算结果int赋值给short可能损失精度*/s += 10; // 此行代码没有问题,隐含了强制类型转换,相当于 s = (short) (s + 10);System.out.println(s);//20}
}
注意事项:
- 所有的赋值运算符的 = 左边一定是一个变量
关系运算符/比较运算符
对数据进行条件判断的符号,最终会返回的结果一定是 布尔结果(false,true)
示例
public class Demo05Operator {public static void main(String[] args) {int a = 10;int b = 10;System.out.println(a == b); //trueSystem.out.println(a != b); // falseSystem.out.println(a > b); // falseSystem.out.println(a >= b); // trueSystem.out.println(a < b); // falseSystem.out.println(a <= b); // true//相等判断必须是== 如果使用=是在进行赋值操作!System.out.println(a = b); // 10 }
}
逻辑运算符
可以把多个条件的布尔结果放在一起运算,最终返回一个布尔结果
示例
public class Demo06Operator {public static void main(String[] args) {//定义变量int i = 10;int j = 20;int k = 30;// & “与”,并且的关系,只要表达式中有一个值为false,结果即为falseSystem.out.println((i > j) & (i > k)); //falseSystem.out.println((i < j) & (i > k)); //falseSystem.out.println((i > j) & (i < k)); //falseSystem.out.println((i < j) & (i < k)); //trueSystem.out.println("--------");// | “或”,或者的关系,只要表达式中有一个值为true,结果即为trueSystem.out.println((i > j) | (i > k)); //falseSystem.out.println((i < j) | (i > k)); //trueSystem.out.println((i > j) | (i < k)); //trueSystem.out.println((i < j) | (i < k)); //trueSystem.out.println("--------");// ^ “异或”,相同为false,不同为trueSystem.out.println((i > j) ^ (i > k)); //falseSystem.out.println((i < j) ^ (i > k)); //trueSystem.out.println((i > j) ^ (i < k)); //rueSystem.out.println((i < j) ^ (i < k)); //falseSystem.out.println("--------");// ! “非”,取反System.out.println((i > j)); //falseSystem.out.println(!(i > j)); // true}
}
短路逻辑运算符
- 在逻辑与运算中,只要有一个表达式的值为false,那么结果就可以判定为false了,没有必要将所有表达式的值都计算出来,短路与操作就有这样的效果,可以提高效率。
- 同理在逻辑或运算中,一旦发现值为true,右边的表达式将不再参与运算。

示例
public class Demo07Operator {public static void main(String[] args) {int x = 3;int y = 4;System.out.println((x++ > 4) & (y++ > 5)); //falseSystem.out.println(x); // 4System.out.println(y); // 5//左边已经可以确定结果为,false 右边不参与运算System.out.println((x++ > 4) && (y++ > 5)); // falseSystem.out.println(x); // 5System.out.println(y); // 5System.out.println((x++ > 4) | (y++ > 5)); //trueSystem.out.println(x); // 6System.out.println(y); // 6//左边已经可以确定结果为 true,右边不参与运算System.out.println((x++ > 4) || (y++ > 5)); // trueSystem.out.println(x); // 7System.out.println(y); // 6}
}
三元运算符
语法格式
执行流程
- 首先计算关系表达式的值
- 如果值为true,返回表达式1的值
- 如果为false,返回表达式2的值
示例
/*
需求:一座寺庙里住着三个和尚,已知他们的身高分别为135cm、110cm、165cm,请用程序实现获取这三个和尚的最高身高。
*/
public class Demo08Test {public static void main(String[] args) {//1:定义三个变量用于保存和尚的身高,单位为cm,这里仅仅体现数值即可。int height1 = 135;int height2 = 110;int height3 = 165;//2:用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来。int tempHeight = height1 > height2 ? height1 : height2;//3:用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存。int maxHeight = tempHeight > height3 ? tempHeight : height3;//4:输出结果System.out.println("maxHeight:" + maxHeight); //maxHeight:165}
}
运算符优先级
在表达式中,哪个运算符先执行后执行是要看优先级的,例如 “*、/” 的优先级高于”+、-” 。
示例
public class Demo09Test {public static void main(String[] args) {// 目标:看看Java是否存在优先级,大家以后需要注意优先级问题System.out.println(10 > 3 || 10 > 3 && 10 < 3); // trueSystem.out.println( (10 > 3 || 10 > 3 ) && 10 < 3); // false}
}
写代码的注意事项
- 表达式不要太复杂
- 先算的使用( )