日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

java 和 区别_java 和 =的区别

發(fā)布時間:2023/12/13 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 和 区别_java 和 =的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。