Java中2個(gè)Integer比較相同的四種方式舉例
Java中2個(gè)Integer比較相同的4種方式
概要
使用前切記Integer的范圍是 【 -128 ~ 127】例如:Integer a = 128; Integer b = 128;
1,使用== 比較
【-128 ~ 127】區(qū)間內(nèi)返回true,否則返回false
// == 比較
if (a == b){
System.out.println("a,b使用==比較 返回結(jié)果:true");
}else {
System.out.println("a,b使用==比較 返回結(jié)果:false");
}
返回false
2,使用equals比較
// equals比較
if (a.equals(b)){
System.out.println("a,b使用equals比較 返回結(jié)果:true");
}else {
System.out.println("a,b使用equals比較 返回結(jié)果:false");
}
返回true,因?yàn)辄c(diǎn)擊內(nèi)部equals方法發(fā)現(xiàn),核心比較的Integer的intValue()值
// 點(diǎn)擊equals時(shí)進(jìn)入該方法
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
3,使用intValue比較
if (a.intValue() == b.intValue()){
System.out.println("a,b使用intValue比較 返回結(jié)果:true");
}else {
System.out.println("a,b使用intValue比較 返回結(jié)果:false");
}
返回true,核心比較的也是Integer的intValue()值
4,使用 compareTo比較
// compareTo比較
if (a.compareTo(b) == 0){
System.out.println("a,b使用compareTo比較 返回結(jié)果:true");
}else {
System.out.println("a,b使用compareTo比較 返回結(jié)果:false");
}
返回true,核心比較的是int值
// 點(diǎn)擊compareTo時(shí)進(jìn)入該方法
// 第一級(jí)
public int compareTo(Integer anotherInteger) {
return compare(this.value, anotherInteger.value);
}
// 第二級(jí)
public static int compare(int x, int y) {
return (x < y) ? -1 : ((x == y) ? 0 : 1);
}
總結(jié)
Integer大于127后不能用==比較的原因是因?yàn)镴ava的自動(dòng)裝箱機(jī)制和Integer對(duì)象的緩存機(jī)制,如果是在區(qū)間內(nèi)則從緩存中獲取返回,否則創(chuàng)建一個(gè)新的Integer對(duì)象,源碼如下:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}

如果你要賦的值在這【-128 ~ 127】區(qū)間內(nèi),他就會(huì)把變量a,b當(dāng)做一個(gè)個(gè)變量,放到內(nèi)存中;但如果不在這個(gè)范圍內(nèi),就會(huì)去new一個(gè)Integer對(duì)象
經(jīng)過測試,
1》 Integer在【-128 ~ 127】范圍內(nèi)時(shí),4個(gè)方法返回都是true,
2》 小于-128或者大于127時(shí),==返回是false,其余3種方法返回的都是true。
到此這篇關(guān)于Java中2個(gè)Integer比較相同的四種方式的文章就介紹到這了,更多相關(guān)Java中Integer比較相同內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)房屋出租系統(tǒng)詳解
這篇文章主要介紹了實(shí)現(xiàn)Java房屋出租系統(tǒng)的實(shí)現(xiàn)過程,文章條理清晰,在實(shí)現(xiàn)過程中加深了對(duì)相關(guān)概念的理解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
springboot+nacos+gateway實(shí)現(xiàn)灰度發(fā)布的實(shí)例詳解
灰度發(fā)布是一種在軟件部署過程中用于平滑過渡的技術(shù),通過引入灰度發(fā)布SDK和配置網(wǎng)關(guān)策略實(shí)現(xiàn),本文就來介紹一下,感興趣的可以了解一下2022-03-03
Java實(shí)現(xiàn)List與數(shù)組互轉(zhuǎn)(Arrays.asList與Collectors.toList)的兩種方法
在 Java 編程中,List 和數(shù)組(Array)是兩種常用的數(shù)據(jù)結(jié)構(gòu),本文將深入探討 List 與數(shù)組之間的相互轉(zhuǎn)換,重點(diǎn)介紹 Arrays.asList 和 Collectors.toList 這兩種常用且重要的方法,并分析它們的特點(diǎn)、適用場景及注意事項(xiàng),需要的朋友可以參考下2026-01-01
基于 SASL/SCRAM 讓 Kafka 實(shí)現(xiàn)動(dòng)態(tài)授權(quán)認(rèn)證的方法
在大數(shù)據(jù)處理和分析中?Apache Kafka?已經(jīng)成為了一個(gè)核心組件,本文將從零開始部署?ZooKeeper?和?Kafka?并通過配置?SASL/SCRAM?和?ACL(訪問控制列表)來增強(qiáng)?Kafka?的安全性,需要的朋友可以參考下2024-07-07

