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