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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 西伯利亚狼丨 中级黑马   /  2016-4-7 21:57  /  927 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我创建了两个字符串; String s1 = "we are students";
String s2 = "we are students"
boolean b=(s1==s2);
为什么b输出的是false?

17 个回复

倒序浏览
“==”比较两个变量本身的值,即两个对象在内存中的首地址。
  “equals()”比较字符串中所包含的内容是否相同。
String s1 = "we are students";就相当于String s1 = new String("we are student ");
这是创建了个String对象,存在堆中,对象的引用存在栈中.
所以这两条语句分别创建了两个对象,两个对象在堆中的地址值不一样,栈中的引用自然不一样!但是值是一样的!所以用"=="比较,肯定是false!
个人理解,希望对你有帮助!
回复 使用道具 举报
对象的比较方式有两种,“==”比较的是两个对象的引用地址是否相等,“equals()”是String类中的方法,比较的是两个对象引用的内容是否相等。
回复 使用道具 举报
==号比较的是地址值
回复 使用道具 举报
你们确定你们测试过?

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

111.png
回复 使用道具 举报

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

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

2016-04-08_134554.jpg
回复 使用道具 举报
首先会在栈区找有没有这个字符串吗,如果有直接引用,否则在里面新建。
ss和s2指向同一个地址,所以==和equals都为true
回复 使用道具 举报
String常量池read-only   一旦被初始化就不可以被改变。
回复 使用道具 举报
结果应该是true吧,  你怎么测试的
回复 使用道具 举报
==是判断运行符,是判断两个对象的引用是否相等,并不是判断两个对象的值是否相等
回复 使用道具 举报
大神 不能这样比的
回复 使用道具 举报
这两个的地址值肯定不一样啊
回复 使用道具 举报
(り____花子 发表于 2016-4-8 12:22
你们确定你们测试过?

谢谢大神    我懂了    谢谢啊
回复 使用道具 举报
syasuker 发表于 2016-4-8 13:46
不知道你咋写的很明显是true啊

我懂了   谢谢   创造对象的时候才是false
回复 使用道具 举报
qing31657552 发表于 2016-4-8 20:22
结果应该是true吧,  你怎么测试的

是true   创建对象的时候才是false    谢谢你
回复 使用道具 举报
qing31657552 发表于 2016-4-8 20:22
结果应该是true吧,  你怎么测试的

是true   创建对象的时候才是false    谢谢你
回复 使用道具 举报
String是引用数据类型,存放的是地址值,所以不相等
回复 使用道具 举报
""==”比较的是两个对象的地址
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马