passionfoure
2015-04-11 23:05
老师说equals()方法是比较对象的引用是都指向同一块内存地址。
第一个代码:s1和s2 不同,分别指向不同的对象内存地址
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)); } }
结果:
s1== s2 is false s1.equals(s2) is true
第二个代码:由于字符串常量池的原因,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)); } }
结果:
s1== s2 is true s1.equals(s2) is true
根据以上两个代码,比较值是否相等是equals(),比较两个引用是否指向同一内存地址是”==“。不过老师下面的代码:
却显示equals()比较的就是两个引用指向的内存地址是否相同。疑惑,难道是String和普通类创建对象有什么不同?
问题解决了!
JDK类中有一些类覆盖了oject类的equals()方法(Object 中equals()方法是比较内存地址的),比较规则为:如果两个对象的类型一致,并且内容一致,则返回true,这些类有:java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)。
如果在Animal类覆盖equals函数,就会得到不同的效果。
Java入门第二季 升级版
530646 学习 · 6091 问题
相似问题
回答 2
回答 1
回答 4
回答 1
回答 3