码迷,mamicode.com
首页 > 其他好文 > 详细

论String类型值比较

时间:2018-03-29 02:20:44      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:实例   false   为什么   程序   lld   rgs   log   integer   out   

String 为什么不能被继承?

因为它被final 修饰,成为不可变类 , 类似的还有 Integer等其它包装类
    public static void main(String[] args) {
            String a = "hello2";
            final String b = "hello";
            String d = "hello";
            String c = b + 2;
            String e = d + 2;
            System.out.println(a == c);
            System.out.println(a == e);
        }

上述代码比较的时候为何第一次为true,第二次为false?

因为第一次和c比较,c是由b+2组成的,b是被final修饰的,它在程序编译期就可以被确定,所以通过查看编译后的程序就可以发现c在编译后成为了hello2
又因为字符串被缓存再常量池,所以两次hello2 指向的是同一地址。


第二次为false是因为,查看字节码发现在+2的时候,是实例化stringbuillder 通过apped去拼接的hello和2最后将其tostring
地址是stringbuiller实例化后的地址,所以比较时不相等。

论String类型值比较

标签:实例   false   为什么   程序   lld   rgs   log   integer   out   

原文地址:https://www.cnblogs.com/DivineHost/p/8667156.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!