1.3 java运算符

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 ;
发布了36 篇原创文章 · 获赞 0 · 访问量 4582
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章