關(guān)于equals()方法有疑問?
老師說equals()方法是比較對象的引用是都指向同一塊內(nèi)存地址。
第一個(gè)代碼:s1和s2 不同,分別指向不同的對象內(nèi)存地址
public?class?Test?A{ public?static?void?main(String?args[])?{ ????String?s1?=?new?String("Hello"); ????String?s2?=?new?String("Hello"); ???System.out.println("?s1==?s2?is?"?+?(s1?==?s2)); ???System.out.println("?s1.equals(s2)?is?"?+?s1.equals(s2)); } }
結(jié)果:
s1==?s2?is?false s1.equals(s2)?is?true
第二個(gè)代碼:由于字符串常量池的原因,s1和s2相同
public?class?Test?A{ public?static?void?main(String?args[])?{ ????String?s1?=“Hello”; ????String?s2?=?“Hello"; ???System.out.println("?s1==?s2?is?"?+?(s1?==?s2)); ???System.out.println("?s1.equals(s2)?is?"?+?s1.equals(s2)); } }
結(jié)果:
?s1==?s2?is?true ?s1.equals(s2)?is?true
根據(jù)以上兩個(gè)代碼,比較值是否相等是equals(),比較兩個(gè)引用是否指向同一內(nèi)存地址是”==“。不過老師下面的代碼:
卻顯示equals()比較的就是兩個(gè)引用指向的內(nèi)存地址是否相同。疑惑,難道是String和普通類創(chuàng)建對象有什么不同?
2015-04-12
問題解決了!
JDK類中有一些類覆蓋了oject類的equals()方法(Object?中equals()方法是比較內(nèi)存地址的),比較規(guī)則為:如果兩個(gè)對象的類型一致,并且內(nèi)容一致,則返回true,這些類有:java.io.file,java.util.Date,java.lang.string,包裝類(Integer,Double等)。
如果在Animal類覆蓋equals函數(shù),就會(huì)得到不同的效果。