论String类型值比较

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实例化后的地址,所以比较时不相等。
posted @ 2018-03-28 23:27  姩澕  阅读(480)  评论(0编辑  收藏  举报