==仍是equals,返回true仍是false?數據庫
先說理論是這樣的: 一、==操做符專門用來比較兩個變量的值是否相等,也就是用於比較變量所對應的內存中所存儲的數值是否相同, 二、equals方法是用於比較兩個獨立對象的內容是否相同,就比如去比較兩我的的長相是否相同,它比較的兩個對象是獨立的。 看完理論後仍是懵逼。測試
很少說了,先上測試代碼, 裏面包含了int,Integer,double,float,string和object類型的數據比較返回true仍是false。看看下面代碼,若是不看結果能判斷出輸出的結果是true仍是false嗎?反正我是判斷錯誤好幾個,更懵逼了。翻譯
public static void main(String[] args) { String str="1000"; float num1=1000; Integer num2=1000; double num3=1000; int num4=1000; int num5=1000; Integer num6=1000; Double num7=(double) 1000000; Double num8=(double) 1000000; double num9=1000; Object o1=100; Object o2=100; System.out.println("num2==num6結果爲:" + (num2==num6)); System.out.println("num4==num5結果爲:" + (num4==num5)); System.out.println("num1==num3結果爲:" + (num1==num3)); System.out.println("num2==num4結果爲:" + (num2==num4)); System.out.println("num2.equals(num4)結果爲:" + num2.equals(num4)); System.out.println("num2.equals(num3)結果爲:" + num2.equals(num3)); System.out.println("num1 == num2結果爲:" + (num1 == num2)); System.out.println("Integer.valueOf(str).equals(num1)結果爲:" + Integer.valueOf(str).equals(num1)); System.out.println("Integer.valueOf(str)==(num1)結果爲:" + (Integer.valueOf(str)==(num1))); System.out.println("num2.equals(num1)結果爲:" + num2.equals(num1)); System.out.println("o1.equals(o2)結果爲:" + o1.equals(o2)); System.out.println("o1==o2 結果爲:" + (o1==o2) ); }
看下輸出結果和本身判斷的是否一致。 輸出結果爲code
num2==num6結果爲:false num4==num5結果爲:true num1==num3結果爲:true num2==num4結果爲:true num2.equals(num4)結果爲:true num2.equals(num3)結果爲:false num1 == num2結果爲:true Integer.valueOf(str).equals(num1)結果爲:false Integer.valueOf(str)==(num1)結果爲:true num2.equals(num1)結果爲:false o1.equals(o2)結果爲:true o1==o2 結果爲:true 此時已經陷入了死循環,想判斷正確結果得知道理論依據,看完理論以後仍是判斷不對結果,想判斷結果得知道理論依據,看完理論依據以後仍是判斷不對結果…… 理論不太容易懂,仍是翻譯成白話更好理解。
總結要點: 一、Integer類型的 數值在-128-127之間 兩個值==比較,結果爲true,超過這個範圍好比值爲1000結果爲false,equals()比較結果都爲true; 二、int類型比較==或equals值相等,結果都爲true; 三、int和float或double類型相等的數值比較:==比較時爲true,equals比較時爲false。(由於類型不一樣); 四、float或double數值相等比較,:==比較時爲true,equals比較時爲false。(由於類型不一樣); 五、object兩個相同值比較,==或equals比較返回結果都爲true;
解決問題: 一、從數據庫查詢數據拿到集合後要對Integer類型id爲200的數據進行處理,if(list.get(i).getId==200){doSmth};這樣的程序會一直不執行; 二、筆試時會出現各類==或equals比較的題,把這個關係搞明白,都能作對。
還有不足,歡迎你們補充,糾偏。對象