一、算术运算符
【典型的代码】
//除法
int i1 = 12;
int i2 = 5;
int i3 = i1 / i2;
System.out.println(i3);
int i4 = i1 / i2 * i2;
System.out.println(i4);
double d1 = i1 / i2 ;
System.out.println(d1);
double d2 = i1;
double d3 = (double)i1 / i2;
System.out.println(d3);
double d4 = i1 / (i2 +0.0);
System.out.println(d4);
//取模:%
//结果的符号与被模数相同
//应用:用来判断是否可以除尽某个数
int m1 = 12;
int n1 = 5;
System.out.println(m1 % n1);//2
int m2 = -12;
int n2 = 5;
System.out.println(m2 % n2);//-2
int m3 = 12;
int n3 = -5;
System.out.println(m3 % n3);//
int m4 = -12;
int n4 = -5;
System.out.println(m4 % n4);//-2
//i++:先运算,后+1
//++i:先+1后运算
int z1 = 10;
//z1++;//自增1
++z1;//自增1
System.out.println(z1);
int a1 = 10;
int b1 = a1++;
System.out.println("a1:" + a1);//a1:11
System.out.println("b1:" + b1);//b1:10
int a2 = 10;
int b2 = ++a2;
System.out.println("a2:" + a2);//a2:10
System.out.println("b2:" + b2);//b2:11
//特别的使用:++或--不会改变变量本身的数据类型
short s1 = 11;
//s1 = s1 + 1;//编译不通过
//s1 = (short)(s1 + 1);//编译通过
s1++;
//i--:先运算,后自减1
//--i:先自减1,后运算
int a3 = 14;
int b3 = --a3;
System.out.println("a3:" + a3);//13
System.out.println("b3:" + b3);//13
int a4 = 14;
int b4 = a4--;
System.out.println("a4:" + a4);//13
System.out.println("b4:" + b4);//14
【特别说明】
1.除法中整型的计算结果仍为整型,涉及取整问题
2.取模:% 结果的符号与被模数相同
经常用于判断是否可以除尽某个数
3.自增、自减
i++:先运算,后加1;
++i:先加1,后yunsua
i–:先运算,后减1
–i:先减1,后运算
二、赋值运算符
- 符号:=
※ 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
※ 支持连续赋值。
※ 扩展赋值运算符: +=, -=, *=, /=, %=
※ +=、-= 等运算结果不会改变变量本身的数据类型
- 总结
情况1:定义一个整型变量,自增1
写法1:num = num + 1;
写法2:num += 1;
写法3:num++;(推荐)
情况2:定义一个整型变量,自增3
写法1:num = num + 3;
写法2:num += 3;(推荐)
【典型代码】
//= :赋值符号
int n1 = 10;
int n2,n3;
n2 = n3 = 20;
System.out.println(n2);
System.out.println(n3);
int n4 = 11,n5 = 21;
System.out.println(n4);
System.out.println(n5);
int m = 5;
m += 3;//m = m + 3;
System.out.println(m);//8
m %= 5;//m = m % 5;
System.out.println(m);//3
//特别的
short s1 = 3;
//s1 =s1 + 3;//编译不通过
//s1 = (short)(s1 + 3);
s1 += 3;//将s1增加3,同时数据类型不变
System.out.println("s1:" + s1);//s1:6
三、比较运算符(关系运算符)
【典型代码】
int num1 = 11;
int num2 = 22;
System.out.println(num1 == num2);//false
System.out.println(num1 = num2);//22
【特别说明】
(1)比较运算符的结果都是boolean型,也就是要么是true,要么是false。
(2)区分 == 和 =
比如:
boolean b = false;
if(b = true){
//执行语句
}
四、逻辑运算符
&—逻辑与 | —逻辑或 !—逻辑非
&& —短路与 || —短路或 ^ —逻辑异或
【典型代码】
boolean b1 = true;
boolean b2 = false;
System.out.println("b1 & b2:" + (b1 & b2));
System.out.println("b1 && b2:" + (b1 && b2));
System.out.println("b1 | b2:" + (b1 | b2));
System.out.println("b1 || b2:" + (b1 || b2));
System.out.println("!b1:" + (!b1));
System.out.println("b1 ^ b2 :" + (b1 ^ b2));
【特别说明】
4.2 区分 &与 &&
(1)如果符号左端是true,二者没区别,都执行右边的运算
(2)如果符号左端是false,& 继续执行符号右边的运算;&& 不执行符号右端的运算
(3)开发中,通常使用&&
4.3 区分:| 与 ||
(1)如果符号左端是false,二者没区别,都执行右边的运算
(2)如果符号左端是true,| 继续执行符号右边的运算;|| 不执行符号右端的运算
(3)开发中,通常使用 ||
说明:逻辑运算符适用于boolean类型的变量,且运算结果也为boolean类型
五、位运算符
【典型代码】
int num = 12;
System.out.println("num << 2 :" + (num << 2));//48
System.out.println("num << 27 :" + (num << 27));//1610612736
System.out.println("num << 28 :" + (num << 28));//-1073741824
System.out.println("num >> 2 :" + (num >> 2));//3
System.out.println("num >> 27 :" + (num >>27));//0
System.out.println("num >> 28 :" + (num >> 28));//0
System.out.println("num >>> 2 :" + (num >>> 2));//3
int num1 = -12;
System.out.println("num1 << 2 :" + (num1 << 2));//-48
System.out.println("num1 << 27 :" + (num1 << 27));//-1610612736
System.out.println("num1 << 28 :" + (num1 << 28));//1073741824
System.out.println("num1 >> 2 :" + (num1 >> 2));//-3
System.out.println("num1 >> 27 :" + (num1 >>27));//-1
System.out.println("num1 >> 28 :" + (num1 >> 28));//-1
System.out.println("num1 >>> 2 :" + (num1 >>> 2));//1073741824
System.out.println("~6 :" + (~6));
System.out.println("~-7 :" + (~-7));
【面试题】
高效实现28: 2<<3 或 8<<1
【特别说明】
(1)位运算符操作的都是整型数据
(2)<<:在一定范围内,每左移一位,相当于2; >>:在一定范围内,每左移一位,相当于/2;正数,空出来的最高位拿0补;负数:>>右移以后,空出来的最高位拿1去补
(3)>>>:无符号右移,不管此数是正数还是负数,高位都拿0补
六、三元运算符
- 表达式:(条件表达式)?表达式1:表达式2;
(1)条件表达式为true,运算后的结果是表达式1;为false,运算后的结果是表达式2;
(2)表达式1和表达式2为同种类型 - 三元运算符和if-else的联系与区别
(1)三元运算符可以简化if-else语句
(2)三元运算符要求必须返回一个结果
(3)if后的代码块可有多个语句
【典型代码】
//获取两个数的较大值
int m = 10;
int n = 5;
int max = (m > n) ? m : n;
System.out.println("max:" + max);
//String maxStr = (m > n) ? "m大" : "n大";
String maxStr = (m > n) ? "m大" : ((m == n) ? "相等" : "n大");
System.out.println("maxStr:" + maxStr);
//使用if-else实现输出两个数的较大值
if(m > n){
System.out.println(m);
}else{
System.out.println(n);
}
【特别说明】
(1)条件表达式的结果是boolean类型
(2)如果条件表达式为true,则执行表达式1;否则,执行表达式2;
(3)表达式1和表达式2必须类型是一致的
(4)三元运算符可以嵌套使用
(5)结论1:凡是使用三元运算符的都可以改写为if-else实现。反之,不成立。
结论2:既可以使用三元运算符也可以使用if-else时,选择三元运算符,因为执行效率高