java 和 区别_java 和 =的区别
java >> 和 >>> 以及 >>>= 的區(qū)別
可能大家都知道java中>> 和 >>> 的區(qū)別,那這里我也啰嗦一下,>> 和 >>> 都是右移操作,只不過(guò)>>>是無(wú)符號(hào)右移,也就是右移之后高位補(bǔ)零。對(duì)于正數(shù)來(lái)說(shuō),兩者沒(méi)有什么區(qū)別,但是對(duì)于負(fù)數(shù)來(lái)說(shuō),>> 右移之后還是負(fù)數(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é)果大家一定也能看明白,唯一要注意的是計(jì)算機(jī)是以補(bǔ)碼的形式存儲(chǔ)的,大家可以去查看相關(guān)資料。那接下來(lái)就說(shuō)一下 >>> 和 >>>= 的區(qū)別(因?yàn)橛幸淮瓮瑢W(xué)翻看ThreadLocal源碼的時(shí)候,發(fā)現(xiàn)了cleanSomeSlots方法里有>>>=這個(gè)操作符,以前沒(méi)有見(jiàn)過(guò)這個(gè)操作,只知道>>>是無(wú)符號(hào)右移,于是我們就討論起來(lái)),我當(dāng)時(shí)寫(xiě)了一段測(cè)試代碼,如下所示:
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行為什么會(huì)輸出1,應(yīng)該是2啊,我也比較納悶,這個(gè)時(shí)候同學(xué)一點(diǎn)撥,就恍然大悟,其實(shí)j在第8行被重新賦值了成了2,而第9行再進(jìn)行右移當(dāng)然輸出1。從這個(gè)例子中我們就知道了其實(shí)>>>=就是類似于+=這種操作,右移之后做了一個(gè)賦值。
總結(jié)
其實(shí)移位操作在我們平時(shí)用的并不多,但是在閱讀JDK源碼的時(shí)候經(jīng)常會(huì)出現(xiàn),比如concurrent包里的ThreadPoolExcutor、ConcurrentHashMap等。所以掌握移位操作以及原碼、反碼、補(bǔ)碼、還是很有必要的。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的java 和 区别_java 和 =的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《魔兽世界:德拉诺之王》人物建模升级 黑
- 下一篇: 暗黑3彩虹关怎么进 暗黑3彩虹关材料收集