Java自动装箱后的值比较
Integer類在自動(dòng)裝箱后,用==來(lái)做比較時(shí),并不總是像其他類一樣比較對(duì)象地址,數(shù)值較小時(shí),它比較的是對(duì)象值。
當(dāng)數(shù)值超過(guò)某個(gè)臨界點(diǎn)時(shí),它才會(huì)比較地址。這個(gè)臨界點(diǎn)是127和-128。
假設(shè)有如下代碼:
Java代碼
Integer i1 = 127;
Integer i2 = 127;
if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");
那么輸出結(jié)果是i1 == i2,比較的是對(duì)象值。
如果:
Java代碼
Integer i1 = 128;
Integer i2 = 128;
if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");
則會(huì)輸出i1 != i2,比較的是對(duì)象地址。
設(shè)計(jì)者的思路大概是,用==來(lái)進(jìn)行比較,大概一般都是要比較值,但這種寫法是不對(duì)的,這樣吧,當(dāng)對(duì)象值在一個(gè)字節(jié)以內(nèi)時(shí),比較值和比較地址的成 本是一樣的,那我就給你比較值,但如果值大于一個(gè)字節(jié),比較值的成本就大過(guò)比較地址了,我就老老實(shí)實(shí)比較地址吧
轉(zhuǎn)載于:https://blog.51cto.com/ethanzhou/1032973
總結(jié)
以上是生活随笔為你收集整理的Java自动装箱后的值比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 你不得不知道的Visual Studio
- 下一篇: 鼠标事件onmouuse大全