1.算术运算符:+ - * / %
负号参加运算时,只参考被除数,被模数。
连接符:+ 运算顺序从左打右
System.out.print(3 + “2”); // 32
任何数和字符串”相加”都是相连接。
自增/自减符:++ - -
b = a++ : 先把a的值预存到内存,a++自增后a的值加1,然后用预存的值去参与其他运算。
b = ++a:先运算++,然后把自增后的a赋值给b。
面试题:
int i = 3;
i = i++;
System.out.println(i); // i = 3
内存执行过程:
temp = i;
i = i + 1;
i = temp;
2.赋值运算符:= += -= *= /= %=
a /= 2: a = a/2
面试题:
short s= 3; // 正常,一次运算。
s += 4; //正常,也是赋值运算,一次运算,进行检查判断int型s+4是否在short范围内,如果在,进行自动转换。(不用做强转)
s = s + 4; //出错,两次运算,s不确定的值,编译无法进行检查判断s+4是否超出short范围,报错精度丢失。(或者右边的s+4为int型4个字节,赋值给short型2个字节需要强转)
3.比较运算符:== != < > <= >= instanceof (检查是否是类的对象,‘Hello’instanceof String)
运算完肯定有结果,结果为true/false。
逻辑运算符:用于连接两个boolean类型的表达式
& 与 有false为false,左右都参与运算
| 或 有true为true,左右都参与运算
^ 异或 两边结果一样为false
! 非 结果相反
面试题:
&& 双与 如果左边为假,右边不判断
|| 双或 如果左边为真,右边不判断
4.位运算符:运算更高效
左移:<< *2^n 都用0补位
右移:>> /2^n 负数最高位用1补
无符号右移:>>> /2^n 都用0补位
&: 二进制位与运算,都为1时,结果才为1
|: 二进制或运算,都为0时,结果才为0
^: 二进制异或运算,操作数不一样时,结果才为1
练习:
1.2*8 : 2<<3
2.交换两个数,不通过第三方变量:
a = a + b;
b = a - b;
a = a - b; //这种方式不要用,而过两个整数的数值过大,会超出int范围,会自动强制转换,数据会变化。
面试的时候(阅读性差):
a = a^b;
b = a^b; //异或两次等于还原
a = a^b;
开发时,使用第三方变量的形式,因为阅读性强:
int c;
c= a;
a= b;
b =c;
5.三元运算符:(条件表达式)? 表达式1 :表达式2;
运算符肯定有结果。
例子:比较三个数较大的整数:
int o,p,q;
int temp = o > p? o : p ;
int max = temp > q ? temp : q ;