1. 赋值运算符
赋值运算符是有值的
int i;
System.out.println(i = 5); //输出5
正因为赋值运算符有值,所以可以可以连等地赋值
int j,k,l,m,n;
j = k = l = m = n = 5;
System.out.println(""+j+k+l+m+n);//输出55555
2. 位运算符
2.1 非~
举例:~-5
-5的原码:1000_0000_0000_0000_0000_0000_0000_0101
-5的反码:1111_1111_1111_1111_1111_1111_1111_1010
-5的补码:1111_1111_1111_1111_1111_1111_1111_1011
-5取非后:0000_0000_0000_0000_0000_0000_0000_0100(也就是4)
非运算连带符号位一起取非
2.2 带符号右移>>
左边的空位用原来的符号位补充
2.3 无符号右移>>>
左边的空位用0补充
2.4 左移<<
右边的空位用0补充
注:移位准则
a. 低于int类型的(byte、short、char)的操作数总是先自动类型转换为int类型后再移位
b. int类型的数移的位数超过32的话,先对移的位数用32求余,然后用移动余数位
c. long和int类似,只是用64求余
(移位只是生成了一个新的数,不会对源操作数产生影响)
3. 比较运算符
3.1 等于==
基本数据类型直接比;如果比较的是引用类型,则只有当两个引用类型相同,或者具有继承关系时才能编译通过,只有两个引用指向的是同一个对象时才返回true,两个对象值相等也不行。
4. 逻辑运算符
4.1 与
短路与&& 与&
4.2 或
短路或|| 或|
短路与或在判断前一个表达式的逻辑结果就能决定整个表达式时,不执行后面那个表达式。
4.3 三目运算符
expression ?if-true:if-false
5. 运算符的结合性
大部分运算符是从左往右结合的,但是单目运算符(++、--、~、!)、赋值运算符(=、+=、-+、*=等)和三目运算符(?:)除外