日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 和 区别_java 和 =的区别

發布時間:2023/12/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 和 =的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。