1、优先级
2、赋值
1)是传值还是传引用?
public void test(){ Tank t1 = new Tank(); t1.level=1; Tank t2 = new Tank(); t2.level=2; t1=t2; t1.level=1; System.out.println(t1.level) //1 System.out.println(t2.level) //1 }
实例2:
<span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">public void f(Tank t){ </span>
t.level = 3;
}
public void test(){
Tank t = new Tank();
t.level=1;
System.out.println(t.level) //3
}
2)里面涉及类型转换
3、自动递增和递减
4、关系操作符
5、逻辑操作符
6、直接常量
6、按位操作符
7、位移
案例:
1、左移(算术移位)
3<< 2 是如何在计算机里是实现的?
首先将3转换为2进制,
00000000 |
00000000 |
00000000 |
00000011 |
3 的二进制 | ||
00000000 |
00000000 |
00000000 |
000011 |
左移2位,砍掉高位 | ||
0000 0000 |
0000 0000 |
0000 0000 |
0000 1100 |
低位补0 | ||
|
|
|
|
|
|
|
结果是12,所以3<<2 =12;
推论
3<<2=12; 3<<1=6 ; 3<<3=24;
3*4=12 ; 3*2=6; 3*8=24;
3*22=12; 3*21=6 3*23 =24;
结论:左移就相当于乘以2的位移个数次幂.
2、右移
6>>2
00000000 |
00000000 |
00000000 |
00000110 |
6的二进制 | ||
000000 |
00000000 |
00000000 |
00000001 |
右移10被砍掉 | ||
00000000 |
00000000 |
00000000 |
00000001 |
高位补0 | ||
|
|
|
|
|
|
|
结果是1,所以6>>2 =1;
结论:一个数往左移越移越大,往右边移越来越小.
右移规律
6>>2=1 ;6>>1=3 ;
6/4=1 ; 6/2=3 ;
右移两位就是除以 2的2次方,右移一位就是除以 2的一次方。
结论:右移就相当于乘以2的位移个数次幂.
总结:>> 是除以2的移动位数次幂
<< 是乘以2的移动位数次幂
用处:最快的运算是位运算。
练习:最有效率的方式算出2乘以8等于几?
3、无符号右移(逻辑移位)
通过演示发现右移时高位就空了出来,>> 右移时高位补什么要按照原有数据的最高位来决定。
1111-1111 1111-1111 1111-1111 1111-1010 -6>>2
1111-1111 1111-1111 1111-1111 1111-0010
最高位补什么要看原有最高位是什么
那么使用>> 后原来是最高位1 的那么空出来的最高位还是1 的,是0的还是0。
如果使用>>> 无论最高位是0还是1 空余最高位都拿0 补,这就是无符号右移。
1111-1111 1111-1111 1111-1111 1111-1010 -6>>>2
001111-1111 1111-1111 1111-1111 1111-10
结果是;1073741822
8、三元操作符
9、字符串操作符
10、类型转换操作符
强制类型转换截尾与舍入
截尾:将29.8转换为int,结果是29
舍入:java.lang.Math的round()方法 如:
Math.round(29.8) ; //30
Math.round(29.2); //29