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

大城市里の小女人 提交于 2020-02-11 14:40:46

都在代码里了

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);
        
    }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!