最近在系統的學習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++的本質區別。