Java 操作符与运算符详解
一.赋值操作符
1 有哪些赋值操作符
2 需要注意的地方
1)
a+=b; ==> a = a+b;
a-=b; ==>a = a-b;
a =-b;//注意这里-不要写在=的后面
2)
short s = 7;
s = s+3;//出错,在作算术运算的时候,会将小类型提升为大类型运算
s += 3;//没有任何问题
说明:
E1 op= E2; a += 3;
编译器会将它编译成=> E1 =(T)(E1 op E2);
s+=3 => s = (short)(s+3);
二.算术运算符
注意的地方
int i = 8/3;// i得到2 ,不是2.333333333
int i = 8/0; //编译没问题,运行出错,整型相除,0不能作为除数
double d = 8.0/0; //没问题,得到正无穷大
double d = 8/0;//整型相除,0不能作为除数
int i = 8%3; //余2,i就是2
请各个位数之和:
//求各个位数之和
int i = 9829;
//得到各位数
int geWei = i/1%10;
int shiWei = i/10%10;
int baiWei = i/100%10;//38
int qianWei = i/1000%10;
三.自加自减
自加 ++
自减 --
a++ => a=a+1;
++a => a=a+1;
a-- => a=a-1;
--a => a=a-1;
----------------
需要注意的地方
1)单独出现时,a++和++a都是一样的
2)参与一个完整表达式的时候,此时就区别
int a = 9;
int m = a++; //先用后加 m9 a10
int a = 9;
int n = ++a; //先加后用 n10 a10
四.关系操作符
1 包括
注意:比较运算符都是返回boolean的值,主要用于条件语句和循环语句的判断。
什么叫表达式:
操作符与操作数组成的式子,叫表达式。
a = 8;
a = 9>8
五.移位操作符
>>:右移,移出的高位补符号位
<<:左移,移出的低位补0
>>> :无符号右移,高位补0
int i = 13
00000000 00000000 00000000 00001101
13>>1 右移一位,高位补符号位,结果得6
0 00000000 00000000 00000000 0000110
13<<1 左移一位,低位直接补0,结果得26
0000000 00000000 00000000 00001101 0
int i =-13
先求:-13的补码
00000000 00000000 00000000 00001101 (绝对值的二进制)
取反加1后
11111111 11111111 11111111 11110011(-13的补码)
-13>>1 右移一位,高位补符号位.
1 11111111 11111111 11111111 1111001
减1取反后(符号位不变)
1 00000000 00000000 00000000 0000111
最终结果得:-7
如果:-13>>>1 无符号右移一位,高位补0.
0 11111111 11111111 11111111 1111001
---------------------
面试题:
以最快的速度算出8*2或者8/2的结果?
8<<1
8>>1
int r = 8*2 //用到很多块内存,所以慢。
六.按位操作符
&:按位与 : 见0为0,全1为1
|:按位或,见1为1,全0为0
^:按位异或,相同为0,相异为1
~:取反,原来为1变为0,原来为0变为1
使用的一些例子:
1 任何一个数异或同一个数2次得到自身,可以用做简单加密器
七.逻辑运算符
&&:短路与,见假为假,全真为真
||:短路或,见真为真,全假为假
& :非短路与,见假为假,全真为真
| :非短路或,见真为真,全假为假
! : 非,取反
^ :异 或,相同为false,相异为true
----
短路和非短路
&&:短路,前面的条件如果为false,不管理 后面条件是true还是false,整体上都为false,所以没必要去判断后面的条件
面试题:
&跟&&区别:
1.&按位与运算符,也叫非短路与
2.&&逻辑与运算符,也叫短路与
3.&第一个表达式不成立的时候,继续算所有的表达式,如(a&b),假如a为false,也还要执行b
4.&&第一个表达式不成立的时候 ,剩下的表达式都不执行了,如(a&&b),假如a为false,则不执行b
八.字符串相加
+可以用来对数值相加,也可以对字符串相加,
+是java下惟一的重载的运算符
String s1 = "hello";
String s2 = "world";
String s3 = s1+s2;
String s4 = "hello"+"world";
字符串可+任何一种数据类型,加号后面的数据类型会自动转换成字符串
需要注意的地方:
String s = "a="+5+5;
System.out.println(s); //输出a=55
s = "a="+(5+5);
System.out.println(s);//输出a=10
九.三目运算符
1 什么是三目运算符
布尔表达式? 值1 : 值2;
2 用来干吗?
对某些条件进行判断,然后取其中两个值中的一个值返回
其实就是if判断的一种简写方式
3 例子
int score = 60;
String s = score>=60? "及格":"不及格";