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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这道题的输出结果为什么false?
class B
{
        public static void main(String[] args){
                String s1="你", s2="好吗",s3="你好吗";

                System.out.println(s3==(s1+s2));
        }
}

27 个回复

倒序浏览
s1 和 s2  和 s3都是指向对象的引用,各站一块内存。  String类有一个方法比较字符串的值是equal.
回复 使用道具 举报
==比较的是地址值,所以false。String重写了equals方法,比较的是内容是否相同,如果改成s3.equals(s1+s2)输出为true
回复 使用道具 举报
s1 s2 s3是三个对象,一个对象怎么可能等于两个对象相加。。。。
回复 使用道具 举报
Vincent饭饭 发表于 2015-9-12 22:24
s1 和 s2  和 s3都是指向对象的引用,各站一块内存。  String类有一个方法比较字符串的值是equal. ...

不过我有测试过,如果s1和s2给的值是一样的,比如说都是“你”,这里输出s1==s2的值就是true,如果s1和s2各占一块儿内存的话,s1==s2的结果不应该也是false么?因为地址值不同
回复 使用道具 举报 1 0
sandyluo 发表于 2015-9-12 22:38
不过我有测试过,如果s1和s2给的值是一样的,比如说都是“你”,这里输出s1==s2的值就是true,如果s1和s2 ...

如果S1="你",S2 = "你",S1==S2 输出为true。
原因是此处S1与S2指向方法区的静态常量池的“你”这个同一对象,地址是一样的,所以true.
回复 使用道具 举报 1 0
gpw 中级黑马 2015-9-12 22:46:21
7#
s1+s2相当于new String(”你“+“好吗“),老师课堂讲过的

点评

正解  发表于 2015-9-12 22:47
回复 使用道具 举报
Doug 中级黑马 2015-9-12 22:48:36
8#
因为s1+s2是变量,编译期无法确定。换成常量(s3==("你"+"好吗"))就没问题了。
回复 使用道具 举报
gpw 发表于 2015-9-12 22:46
s1+s2相当于new String(”你“+“好吗“),老师课堂讲过的

哈哈,三期的,亮身份吧
回复 使用道具 举报
顶!!!!!!!!!!!!
回复 使用道具 举报
gpw 发表于 2015-9-12 22:46
s1+s2相当于new String(”你“+“好吗“),老师课堂讲过的

哈哈,三期的,亮出你的身份
回复 使用道具 举报
gpw 中级黑马 2015-9-12 22:58:35
12#
sandyluo 发表于 2015-9-12 22:56
哈哈,三期的,亮身份吧

都是被黑马币逼得,你黑马币那么多怎么不兑现技术分
回复 使用道具 举报
gpw 发表于 2015-9-12 22:58
都是被黑马币逼得,你黑马币那么多怎么不兑现技术分

不着急,慢慢来- -,一定次兑完看着爽。
回复 使用道具 举报
地址不同
回复 使用道具 举报
gpw 发表于 2015-9-12 22:46
s1+s2相当于new String(”你“+“好吗“),老师课堂讲过的

郭鹏伟- -
回复 使用道具 举报
我是来学习的。。。
回复 使用道具 举报
s3和 (s1+s2)本身是两个不同的对象,并且==在String类中就是用来判断两个对象是否指向同一块内存的,当两个String对象字面常量相同且本身内存小于一个char类型所占的内存时,jvm就会默认给这两个对象分配同一个内存空间,叫做享元模式
回复 使用道具 举报
zzq18217362451 来自手机 中级黑马 2015-9-12 23:37:10
18#
s1+s2就相当于new的一个对象
回复 使用道具 举报
且听风_R0pZK 来自手机 中级黑马 2015-9-12 23:39:15
19#
指向的内存地址并不相同啊
回复 使用道具 举报
==用来比较地址是否相同,你这里明显不同啊
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马