Java String 在拼接时的编译器优化

都在代码里了

public static void main(String[] args) {
        String str = "str";
        final String finalString = "str";
        
        String str1 = "str01";
        String str2 = "str"+ "01";
        System.err.println(str1 == str2);
        //JDK1.6后,常量字符串的+操作,在编译阶段会直接优化成一个字符串
        //所以str1和str2指向常量池中的同一引用地址
        String str3 = str + "01"; //编译器自动调用StringBuilder.apend()方法添加
        //虽然内容一样,但地址是不一样的
        System.err.println(str1 == str3);
        String str4 = finalString + "01";
        //final变量在编译后会直接替换成对应的值,故所以str4="str" + "01"
        //再加上编译器的优化,会直接合并成str4="str01",与str01相等
        System.err.println(str1 == str4);
        
        String str5 = new String("str01").intern();
        //intern方法返回字符串池中的对象,所以相等
        System.err.println(str1 == str5);
        
    }

 

posted @ 2020-02-11 13:36  我永远喜欢石原里美  阅读(621)  评论(0编辑  收藏  举报