==還有equals(),輸出true仍是false?

==仍是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比較的題,把這個關係搞明白,都能作對。

還有不足,歡迎你們補充,糾偏。對象

相關文章
相關標籤/搜索