黑马程序员技术交流社区

标题: 请问这个程序结果是为什么? [打印本页]

作者: wlsperfect    时间: 2016-3-12 13:05
标题: 请问这个程序结果是为什么?
class Demo_String {
                public static void main(String[] args) {  
                String s1 = "ab";
                String s2 = "abc";
                String s3 = s1 + "c"
                System.out.println(s3 == s2);
                System.out.println(s3.equals(s2));
                }
}
这个结果为什么一个是false一个是true?


作者: lijiy09    时间: 2016-3-12 14:53
String是引用类型的,不能直接用==比较,equls( )方法比较的是字符串内容是否相同。
作者: wlsperfect    时间: 2016-3-12 16:35
lijiy09 发表于 2016-3-12 14:53
String是引用类型的,不能直接用==比较,equls( )方法比较的是字符串内容是否相同。 ...

原来是这样,多谢多谢
作者: the_way    时间: 2016-3-12 16:49
==比较的是地址值 equal才是比较内容是否一致
作者: 为民除害123456    时间: 2016-3-12 21:51
==比较的是地址值 equal才是比较内容是否一致
作者: wlsperfect    时间: 2016-3-13 10:14
为民除害123456 发表于 2016-3-12 21:51
==比较的是地址值 equal才是比较内容是否一致

s3和s2的地址值不一样吗? 他们的地址值是多少呢
作者: 为民除害123456    时间: 2016-3-13 10:40
wlsperfect 发表于 2016-3-13 10:14
s3和s2的地址值不一样吗? 他们的地址值是多少呢

计算机分配,我哪里知道,但是,可以显示出来
作者: xushao    时间: 2016-3-13 10:45
        public static void main(String args[])
        {
                String s1 = "ab";
                String s2 = "abc";
                String s3 = (new StringBuilder(String.valueOf(s1))).append("c").toString();
                System.out.println(s3 == s2);
                System.out.println(s3.equals(s2));
        }



反码看一下 s3是堆中的空间地址  s2是常量池的地址




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