为了账号安全,请及时绑定邮箱和手机立即绑定

关于equals()方法有疑问?

老师说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(),比较两个引用是否指向同一内存地址是”==“。不过老师下面的代码:

http://img1.sycdn.imooc.com//55293ffb0001598c04000295.jpg

却显示equals()比较的就是两个引用指向的内存地址是否相同。疑惑,难道是String和普通类创建对象有什么不同?

正在回答

1 回答

问题解决了!

  • JDK类中有一些类覆盖了oject类的equals()方法(Object 中equals()方法是比较内存地址的),比较规则为:如果两个对象的类型一致,并且内容一致,则返回true,这些类有:java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)。

  • 如果在Animal类覆盖equals函数,就会得到不同的效果。

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530553    人
  • 解答问题       6091    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

关于equals()方法有疑问?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信