黑马程序员技术交流社区

标题: 关于String类 [打印本页]

作者: hanrongle    时间: 2013-7-30 09:37
标题: 关于String类
本帖最后由 杜光 于 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?

作者: denghui1010    时间: 2013-7-30 09:48
因为s1和s2指向两个不同的对象,equals相等是因为s1和s2的字符串相等
作者: 手心里的温柔    时间: 2013-7-30 09:50
s1,s2不是同一个对象  而字符串内容是一样的 所以equals()的值为true


希望能帮到你  共同学习哈

作者: zhouchao    时间: 2013-7-30 10:00
s1 == s2 比较的是两个对象的内存地址值  s1 和 s2是指向两个对象 内存地址值是不同的
s1.equals(s2) 比较的是对象的内容是否相同,两个对象的内容都是abc所以s1.equals(s2)为true
这时个人的理解 你可以做个参考
作者: 下雨天    时间: 2013-7-30 10:04
==  与 equals:
当==用来比较基本类型时,比较的是内容,例如:1==1 true

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

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

当equals用来比较String类型以外的引用类型时,比较的是地址值,与用==比较引用是一样的道理
作者: hoyouly    时间: 2013-7-30 10:08
s1在内存中有一个对象。
s2在内存中有两个对象。new 是一个对象,”abc”也是一个对象,字符串是一个特殊的对象

equals 方法 比较的是地址值,

作者: jialihong    时间: 2013-7-30 10:12
因为==是比较两个变量的地址,
equals比较的是两个变量的值
作者: 王希军    时间: 2013-7-30 10:42
s1和s2是两个不同的字符串对象,在内存当中会分配不同的内存地址,不同的地址中可以存放相同的值(两个对象都存放的是“abc”)。“==”比较的是内存地址,所以输出为false,而equal()方法比较的是两个对象中存放的值,所以输出结果为true。




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