A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 747437484 中级黑马   /  2013-12-15 09:54  /  1446 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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));
  }
}


评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

5 个回复

倒序浏览
结果是 false     对象不同。  地址值不同
           true      对象中内容相同,
           false      对象不同  地址值不同
           false     对象不同 地址值不同。
==:可以比较基本数据类型, 和引用数据类型。当用于基本数据类型的时候,比较值是否相等,当用于引用数据类型的时候,判断对象是否相同,也就是地址值是否相同。
equals:只比较对象中的内容,相同返回true,不相同返回false,当比较的是非字符串变量时,比较的是对象是否相同。跟== 一样

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
结果是false,true,false,false。对于字符串,在内存中一旦存在,就不会改变,只能改变他的引用。s3和s4分别指向了他们在内存中的位置也就地址值。对象不同,地址是就不同。而字符串中的equals方法比较的是字符串内容,内容一样,所以为true。不知道TextEqusl 这两个对象你怎么去写的,但是可以同样去解释。只是个人认为,仅为参考。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报

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方法。
  }
}

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 公子-醉香 于 2013-12-15 12:09 编辑

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
  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个情况了吧

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马