Java是一種跨平臺的編程語言,在計算機領域被廣泛應用。但是在Java編程中,經常會遇到一些問題,其中就包括小和問題。
public static void main(String[] args) {
int a = 1000;
int b = 1000;
System.out.println(a == b); // 輸出為true
Integer c = 1000;
Integer d = 1000;
System.out.println(c == d); // 輸出為false
}
在上述代碼中,a和b都是基本類型int,它們的數值相等,因此輸出為true。而c和d都是Integer類型,它們在聲明時直接賦值為1000,但是輸出結果卻為false,這就是典型的小和問題。
小和問題是因為Java為了提高性能,預先創建了-128~127之間的整數對象,這些整數對象會被緩存起來,下次使用時直接返回緩存中的對象。而當賦值為超過此范圍的整數時,由于緩存中沒有此對象,于是Java會重新創建一個新對象。
因此當使用==比較兩個超過-128~127之間的整數對象時,會返回false,因為它們引用的是不同的對象。但是使用equals方法比較時,會比較兩個對象的值是否相等,因此返回true。
在Java編程中,應該盡量避免使用==比較兩個對象,特別是在比較Integer、Long等包裝類時更應該注意。推薦使用equals方法比較。
下一篇2017后端PHP