黑马程序员技术交流社区

标题: Equals()方法的问题,请告诉我为什么 [打印本页]

作者: 747437484    时间: 2013-12-15 09:54
标题: Equals()方法的问题,请告诉我为什么
public class TestEqual {
  public static void main(String[] args){
          String s3 = new String("hello");
          String s4 = new String("hello");
          TestEqual d1 = new TestEqual();
          TestEqual d2 = new TestEqual();
          System.out.println(s3==s4);
          System.out.println(s3.equals(s4));
          System.out.println(d1==d2);
          System.out.println(d1.equals(d2));
  }
}



作者: 一年之后    时间: 2013-12-15 10:18
结果是 false     对象不同。  地址值不同
           true      对象中内容相同,
           false      对象不同  地址值不同
           false     对象不同 地址值不同。
==:可以比较基本数据类型, 和引用数据类型。当用于基本数据类型的时候,比较值是否相等,当用于引用数据类型的时候,判断对象是否相同,也就是地址值是否相同。
equals:只比较对象中的内容,相同返回true,不相同返回false,当比较的是非字符串变量时,比较的是对象是否相同。跟== 一样
作者: 月生春    时间: 2013-12-15 10:33
结果是false,true,false,false。对于字符串,在内存中一旦存在,就不会改变,只能改变他的引用。s3和s4分别指向了他们在内存中的位置也就地址值。对象不同,地址是就不同。而字符串中的equals方法比较的是字符串内容,内容一样,所以为true。不知道TextEqusl 这两个对象你怎么去写的,但是可以同样去解释。只是个人认为,仅为参考。
作者: 城市儒侠    时间: 2013-12-15 11:14

public class TestEqual {
  public static void main(String[] args){
          String s3 = new String("hello");
          String s4 = new String("hello");
          TestEqual d1 = new TestEqual();
          TestEqual d2 = new TestEqual();
          System.out.println(s3==s4);//false     两个引用类型,比较的是内存地址,所以不可能一样。
          System.out.println(s3.equals(s4));//true  String类重写了equals方法,这个时候比较的就是值了,所以返回true
          System.out.println(d1==d2);//false 同理这个比较的也是两个内存地址,他们是不一样的。
          System.out.println(d1.equals(d2));//false  按照你现在的代码返回是//false, 如果你想返回true,你可以在TestEqual 里面重写equals方法。
  }
}
作者: 公子-醉香    时间: 2013-12-15 12:08
本帖最后由 公子-醉香 于 2013-12-15 12:09 编辑


作者: Diaraelo    时间: 2013-12-15 13:29
  1. public class T1 {
  2. public static void main(String[] args) throws ClassNotFoundException,InstantiationException,IllegalAccessException{
  3. // TODO Auto-generated method stub
  4. String s1 = "abc";
  5. String s2 = new String("abc");
  6. System.out.println(s1);//输出abc
  7. System.out.println(s2);//输出abc
  8. System.out.println(s1.equals(s2)); //判断其内容相同都是abc返回true
  9. System.out.println(s1.getClass()==s2.getClass());//都是String 类的字节码对象所以返回true
  10. System.out.println(s1==s2); //2个不同对象地址值不同返回flase

  11. }

  12. }
复制代码

用了一个String类来说明,可以看出equals是判断内容是否相同
==是判断对象地址是否相同(即指向对象是否相同)
getClass()是类字节码对象,所以是比较类是否相同。
大概比较容易混乱的就上面3个情况了吧





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