黑马程序员技术交流社区

标题: "==和equals的问题,求解答" [打印本页]

作者: 绝版坏银    时间: 2015-6-8 16:50
标题: "==和equals的问题,求解答"
  1. public class Test5 {
  2.         public static void main(String[] args) {
  3.                 String s = new String("hello");
  4.                 String s2 = "hello";
  5.                 System.out.println(s.equals(s2));//true
  6.                 System.out.println(s==s2);//false
  7.         }
  8. }
复制代码


第一个s.equals(s2) 不是没重写比较的是地址值么,难道一样????
第二个是因为字面值作为字符串对象和通过构造方法创建对象的不同,所以是false
作者: 邱石    时间: 2015-6-8 17:58
String类重写了equals方法,所以这里equals比较的是指,不是地址值。
作者: mishisanyi    时间: 2015-6-8 19:56
equals是object中的方法,在String中已经被重写过,比较的就是两个字符串对象的内容是否相等
作者: 乐成    时间: 2015-6-8 20:24
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
作者: canyellwang    时间: 2015-6-8 20:56
前面答的很好了。 重写过是关键。      




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2