黑马程序员技术交流社区

标题: 字符串 [打印本页]

作者: 西伯利亚狼丨    时间: 2016-4-7 21:57
标题: 字符串
我创建了两个字符串; String s1 = "we are students";
String s2 = "we are students"
boolean b=(s1==s2);
为什么b输出的是false?

作者: Hawking    时间: 2016-4-7 22:19
“==”比较两个变量本身的值,即两个对象在内存中的首地址。
  “equals()”比较字符串中所包含的内容是否相同。
String s1 = "we are students";就相当于String s1 = new String("we are student ");
这是创建了个String对象,存在堆中,对象的引用存在栈中.
所以这两条语句分别创建了两个对象,两个对象在堆中的地址值不一样,栈中的引用自然不一样!但是值是一样的!所以用"=="比较,肯定是false!
个人理解,希望对你有帮助!

作者: doudouchiyula    时间: 2016-4-7 22:52
对象的比较方式有两种,“==”比较的是两个对象的引用地址是否相等,“equals()”是String类中的方法,比较的是两个对象引用的内容是否相等。
作者: 陌丶    时间: 2016-4-7 23:02
==号比较的是地址值
作者: (り____花子    时间: 2016-4-8 12:22
你们确定你们测试过?

111.png (33.01 KB, 下载次数: 28)

111.png

作者: syasuker    时间: 2016-4-8 13:46

不知道你咋写的很明显是true啊

2016-04-08_134554.jpg (20.1 KB, 下载次数: 28)

2016-04-08_134554.jpg

作者: ruigao1993    时间: 2016-4-8 13:54
首先会在栈区找有没有这个字符串吗,如果有直接引用,否则在里面新建。
ss和s2指向同一个地址,所以==和equals都为true
作者: syasuker    时间: 2016-4-8 14:11
String常量池read-only   一旦被初始化就不可以被改变。
作者: qing31657552    时间: 2016-4-8 20:22
结果应该是true吧,  你怎么测试的
作者: 15614014298    时间: 2016-4-8 21:25
==是判断运行符,是判断两个对象的引用是否相等,并不是判断两个对象的值是否相等
作者: ttkuaile    时间: 2016-4-8 21:29
大神 不能这样比的
作者: 晴苑    时间: 2016-4-8 21:43
这两个的地址值肯定不一样啊
作者: 西伯利亚狼丨    时间: 2016-4-8 22:50
(り____花子 发表于 2016-4-8 12:22
你们确定你们测试过?

谢谢大神    我懂了    谢谢啊
作者: 西伯利亚狼丨    时间: 2016-4-8 22:52
syasuker 发表于 2016-4-8 13:46
不知道你咋写的很明显是true啊

我懂了   谢谢   创造对象的时候才是false
作者: 西伯利亚狼丨    时间: 2016-4-8 22:53
qing31657552 发表于 2016-4-8 20:22
结果应该是true吧,  你怎么测试的

是true   创建对象的时候才是false    谢谢你
作者: 西伯利亚狼丨    时间: 2016-4-8 22:54
qing31657552 发表于 2016-4-8 20:22
结果应该是true吧,  你怎么测试的

是true   创建对象的时候才是false    谢谢你
作者: daniua    时间: 2016-4-8 23:19
String是引用数据类型,存放的是地址值,所以不相等
作者: cohle1992    时间: 2016-4-8 23:33
""==”比较的是两个对象的地址




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