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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小小ye 中级黑马   /  2015-4-16 22:29  /  554 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.下面程序的运行结果是?
   String s3 = “你好吗”;
   String s4 =”你”;
   String s5 =”好吗”;
   System.out.println(s3==(s4+s5));
为什么是false呢?

评分

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

查看全部评分

10 个回复

倒序浏览
String 是应用型变量,传递的是地址值不是实际值,两个地址值相加肯定不相等的...
回复 使用道具 举报
==是比较的地址
回复 使用道具 举报
"=="用于基本类型数据时比较左右两边的值是否相等;用于引用类型数据时比较左右两者在内存中的存放地址是否相同,即是否引用同一个对象。
回复 使用道具 举报
传入的是地址值
回复 使用道具 举报
在使用“==”比较对象时,分两种情况,
1,比较基本数据类型时,==是比较左右两边的值是否相等,相等返回true;
2,比较引用数据类型了,==是比较左右两边的虚地址值,也就是比较引用的对象石头一致。
String属于引用数据类型,且初始化赋值之后的值不能再更改。
你比较的是两个String,地址是不一样的,所以会返回false。
回复 使用道具 举报 1 0
cyr 中级黑马 2015-4-17 09:05:16
7#
因为s4+s5是在程序运行时才进行运行的,会在内存中重新开辟一块内存空间存储运算结果,“==”是比较两个对象在内存中的存储地址,所以这s3与(s4+s5)的运算结果肯定是不相同的。不过如果你写成s3==“你”+“好吗”就会得到true,因为javac会在编译的时候,会对字符串常量直接相加进行优化。
回复 使用道具 举报 1 0
sisel 中级黑马 2015-4-17 09:12:51
8#
比较的是引用是否同一个对象,比较内容应该用equals
回复 使用道具 举报
String比较特殊,equals()被重写过
回复 使用道具 举报
s3==s4+s5
因为s4和s5和变量,无法在编译时期就确定s4和s5对应的值,因此是返回的是false
要想他返回的是true可以在定义s4和s5时,加上final声明,这样在调用时,就会进行宏替换
回复 使用道具 举报
本帖最后由 YQliang 于 2015-4-17 11:34 编辑

首先你要区分一下=和==,=为赋值,==为等于,==不是运算符,他是用来判断==两边运算结果是否相等的,注意是判断,其结果是布尔,然后判断字符串是用s3.equals(s4+s5);然后你这个就是true了;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马