黑马程序员技术交流社区

标题: 关于== 的问题 [打印本页]

作者: 小小ye    时间: 2015-4-16 22:29
标题: 关于== 的问题
1.下面程序的运行结果是?
   String s3 = “你好吗”;
   String s4 =”你”;
   String s5 =”好吗”;
   System.out.println(s3==(s4+s5));
为什么是false呢?
作者: 棉棉502    时间: 2015-4-16 23:15
String 是应用型变量,传递的是地址值不是实际值,两个地址值相加肯定不相等的...
作者: 郝聚德    时间: 2015-4-16 23:17
==是比较的地址
作者: aaronwang    时间: 2015-4-16 23:21
"=="用于基本类型数据时比较左右两边的值是否相等;用于引用类型数据时比较左右两者在内存中的存放地址是否相同,即是否引用同一个对象。
作者: kayaking    时间: 2015-4-16 23:24
传入的是地址值
作者: 田晓莉    时间: 2015-4-17 08:08
在使用“==”比较对象时,分两种情况,
1,比较基本数据类型时,==是比较左右两边的值是否相等,相等返回true;
2,比较引用数据类型了,==是比较左右两边的虚地址值,也就是比较引用的对象石头一致。
String属于引用数据类型,且初始化赋值之后的值不能再更改。
你比较的是两个String,地址是不一样的,所以会返回false。
作者: cyr    时间: 2015-4-17 09:05
因为s4+s5是在程序运行时才进行运行的,会在内存中重新开辟一块内存空间存储运算结果,“==”是比较两个对象在内存中的存储地址,所以这s3与(s4+s5)的运算结果肯定是不相同的。不过如果你写成s3==“你”+“好吗”就会得到true,因为javac会在编译的时候,会对字符串常量直接相加进行优化。
作者: sisel    时间: 2015-4-17 09:12
比较的是引用是否同一个对象,比较内容应该用equals
作者: 弯曲/mg抛物☀    时间: 2015-4-17 09:18
String比较特殊,equals()被重写过
作者: lwj123    时间: 2015-4-17 10:51
s3==s4+s5
因为s4和s5和变量,无法在编译时期就确定s4和s5对应的值,因此是返回的是false
要想他返回的是true可以在定义s4和s5时,加上final声明,这样在调用时,就会进行宏替换
作者: YQliang    时间: 2015-4-17 11:25
本帖最后由 YQliang 于 2015-4-17 11:34 编辑

首先你要区分一下=和==,=为赋值,==为等于,==不是运算符,他是用来判断==两边运算结果是否相等的,注意是判断,其结果是布尔,然后判断字符串是用s3.equals(s4+s5);然后你这个就是true了;




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