java 和 区别_java 和 =的区别
java >> 和 >>> 以及 >>>= 的區(qū)別
可能大家都知道java中>> 和 >>> 的區(qū)別,那這里我也啰嗦一下,>> 和 >>> 都是右移操作,只不過>>>是無符號右移,也就是右移之后高位補零。對于正數(shù)來說,兩者沒有什么區(qū)別,但是對于負數(shù)來說,>> 右移之后還是負數(shù),而>>>右移之后就變成了正數(shù),大家可以參看一下例子:
1 public classShiftTest {2 public static voidmain(String[] args) {3 int n = 15;4 System.out.println(java.lang.Integer.toBinaryString(n));5 System.out.println(n >> 2);6 System.out.println(n >>> 2);7
8 int m = -15;9 System.out.println(java.lang.Integer.toBinaryString(m));10 System.out.println(m >> 2);11 System.out.println(m >>> 2);12 }13 }
輸出結(jié)果 1111
3
3
11111111111111111111111111110001
-4
1073741820
此例以及結(jié)果大家一定也能看明白,唯一要注意的是計算機是以補碼的形式存儲的,大家可以去查看相關(guān)資料。那接下來就說一下 >>> 和 >>>= 的區(qū)別(因為有一次同學(xué)翻看ThreadLocal源碼的時候,發(fā)現(xiàn)了cleanSomeSlots方法里有>>>=這個操作符,以前沒有見過這個操作,只知道>>>是無符號右移,于是我們就討論起來),我當(dāng)時寫了一段測試代碼,如下所示:
1 public classShiftTest {2 public static voidmain(String[] args) {3 int n = -4;4 System.out.println(n >>>= 1);5 System.out.println(n >>> 1);6
7 int j = 4;8 System.out.println(j >>>= 1);9 System.out.println(j >>> 1);10 }11 }12
輸出結(jié)果 2147483646
1073741823
2
1
從此例中,大家可能比較疑惑了,第9行為什么會輸出1,應(yīng)該是2啊,我也比較納悶,這個時候同學(xué)一點撥,就恍然大悟,其實j在第8行被重新賦值了成了2,而第9行再進行右移當(dāng)然輸出1。從這個例子中我們就知道了其實>>>=就是類似于+=這種操作,右移之后做了一個賦值。
總結(jié)
其實移位操作在我們平時用的并不多,但是在閱讀JDK源碼的時候經(jīng)常會出現(xiàn),比如concurrent包里的ThreadPoolExcutor、ConcurrentHashMap等。所以掌握移位操作以及原碼、反碼、補碼、還是很有必要的。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的java 和 区别_java 和 =的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《魔兽世界:德拉诺之王》人物建模升级 黑
- 下一篇: java exception 二次抛出_