對Java equals方法的理解

最近在系統的學習java,發現確實很多地方都與C++很不一樣,這讓曾經癡迷於C++的我很難適應。但是沒辦法,要交課程報告,也只能好好學下。
發現java中的Obeject類定義了equals這個方法,爲什麼不能像C++一樣直接用==比較呢。
下面看一個例子:

public class Main{
	public static void main(String[] args) {
		String s1=new String("123"),s2=new String("123");
		System.out.print(s1==s2);
	}	
}

運行結果會是什麼呢?如果用C++中的思想,答案會是true。可是在java中,上述程序定義的s1,s2只是一個引用(類似C中的指針),它們各自指向兩個new出的對象,由於指向不同,s1,s2當然不同。因此答案是false。

那再看下面這個程序,運行結果又會是什麼呢?還是false嗎?並不是,答案應該是true。因爲這裏的"123"字符串存放在常量區,java有一個很聰明的節省空間的機制,就是在常量區創建"123"後,s2也可以直接指向它,不用另外創建。因此,此時s1,s2指向相同。

public class Main{
	public static void main(String[] args) {
		String s1="123",s2="123";
		System.out.print(s1==s2);
	}	
}

其實,通過對equals的學習,讓我更深入理解的是java面向對象的機制,它真的就是完全“面向對象的語言”,從這個點上來理解,就可以看清它與C++的本質區別。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章