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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hanrongle 中级黑马   /  2013-7-30 09:37  /  1184 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜光 于 2013-7-30 10:14 编辑
  1. class StringDemo{
  2.      public static void main(String[] args){
  3.             String s1="abc";
  4.             String s2=new String("abc");
  5.             System.out.println(s1==s2);
  6.             System.out.println(s1.equals(s2));
  7.      }
  8. }
复制代码
为什么s1==s2是false,是s1.equals(s2)是true?

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

7 个回复

倒序浏览
因为s1和s2指向两个不同的对象,equals相等是因为s1和s2的字符串相等

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
s1,s2不是同一个对象  而字符串内容是一样的 所以equals()的值为true


希望能帮到你  共同学习哈
回复 使用道具 举报
s1 == s2 比较的是两个对象的内存地址值  s1 和 s2是指向两个对象 内存地址值是不同的
s1.equals(s2) 比较的是对象的内容是否相同,两个对象的内容都是abc所以s1.equals(s2)为true
这时个人的理解 你可以做个参考

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
==  与 equals:
当==用来比较基本类型时,比较的是内容,例如:1==1 true

当==用来比较引用类型时,比较的是地址值 例如: new Student() == new Student() false 这是因为两个new产生了两个实例 也就相应的产生两个地址

当equals用来比较String类型时,比较的是内容本身,就像你的代码中的一样 结果是true

当equals用来比较String类型以外的引用类型时,比较的是地址值,与用==比较引用是一样的道理

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
s1在内存中有一个对象。
s2在内存中有两个对象。new 是一个对象,”abc”也是一个对象,字符串是一个特殊的对象

equals 方法 比较的是地址值,
回复 使用道具 举报
因为==是比较两个变量的地址,
equals比较的是两个变量的值
回复 使用道具 举报
s1和s2是两个不同的字符串对象,在内存当中会分配不同的内存地址,不同的地址中可以存放相同的值(两个对象都存放的是“abc”)。“==”比较的是内存地址,所以输出为false,而equal()方法比较的是两个对象中存放的值,所以输出结果为true。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马