1.运算符
1.1算数运算符
(1).二元运算符
加,减,乘,除,取余%,取余的运算结果只和左边的数值相关
(2)一元运算符
++,--,这里的自增自减运算和C语言一致
1.2赋值运算符
=
1.3扩展运算符
+=,-=,*=,/=
1.4关系运算符
略,只有instanceof需要注意,判断某个对象是否为某个类的实例,关系运算符的结果只能是布尔类型。不能和C语言一样写 int a = 1 > 3;
1.5.逻辑运算符
&&,||,!,^(异或)
1.6.位运算符
略过,只有>>>需要注意
1.7 三元运算符
?:
1.8 字符串连接符
+
上一次已经说过相关问题,需要再说一遍;
类型会操作范围更高的类型进行转化,int + long类型,结果是long类型
double和整形运算,会转化为double
double和float运算,转化为float
float和float运算,结果是float
如果是除法的运算赋值给整形,则小数被直接截断不会四舍五入
整型不能和浮点型一起运算?
目前来看是这样,也许学到后面可以做类型转换
2.短路运算
使用逻辑运算符进行计算,就会有和C语言一样的规律,
A&&B
如果A错了,B就不做运算
A||B
A对了,B还是要继续运算
比如:
boolean b = 1 > 2 && (3/0);
3/0写出来是要报错的,但是由于1>2已经错误,所以它反而不会报错
同理
int i = 0;
boolean b = 1<2 || (++i)>= 1;
i的值是什么呢?
3.位运算符
就是对应位置的0和1相运算,这一点C语言没有区别
但是对于移位运算符需要注意很多问题,但是实际上都是按照补码运算,C语言里面有详细分析,没什么好说的了。
符号位如果是1,则代表负数
符号位如果是0,则代表正数
一般情况下,编程语言都默认自己的类型是有符号的。
当数值右移动的时候,最高位补自己的最高位符号位
当数值左移的时候,低位补0,正数就是自己,没有什么好说的,负数变成补码运算后,还要再转为原码。
那么思考一下
-1右移动和左移动分别是多少
按照上面的理论,右移动>>应该是-1,左移动是-2
其他的就没什么好说的了。
4.运算符优先级
没什么好记的,一元运算符自高,其次是算数运算符,然后是逻辑运算符,然后是位运算符(除了左移和右移动,取反运算符);
逻辑与大于逻辑或
记不住就多用括号