MTK——String

注意:

  • 需要注意的是"na" + "me" != s1 + s2//其中s1="na", s2="me",由于s1是一个变量,javac编译器启动优化,自动生成StringBuilder,进行字符串连接操作,因此生成的新字符串会出现在java堆中,下面是截取的一部分反编译程序:

    image.png

  • 注意string.intern():将string对象拉入常量池,并返回一个指向常量池的引用。

public class Intern {
    public static void main(String[] args) {
        String s1 = "name";
        String s2 = new String("name");
        String s3 = "na";
        String s4 = "me";
        String s5 = "na" + "me";
        String s6 = s3 + s4;

        System.out.println(s1 == s2);//常量池 != 堆,false
        System.out.println(s1 == s5);//均在常量池,true
        System.out.println(s1 == s6);//由于StringBuilder在堆中生成了新对象,特别注意和上一个区别,false
        System.out.println(s1 == s6.intern());//s6.intern(),拉回了常量池,如果常量池存在,直接返回,true
        System.out.println(s2 == s2.intern());//false,s2.intern()返回一个新引用,指向常量池。
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   需要说明的一点是,这篇文章是以《深入理解Java虚拟机》第二版这本书为基础的,这里假设大家已经了解了JVM的运...
    Geeks_Liu阅读 14,764评论 5 44
  • Java内存分配与管理是Java的核心技术之一,一般Java在内存分配时会涉及到以下区域: 寄存器:我们在程序中无...
    yekai阅读 2,662评论 0 3
  • 上邪!我欲与君相知,长命无绝衰,山无陵,江水为竭,冬雷震震,夏雨雪,天地合,乃敢与君绝! 她每次吟唱这首诗,都会想...
    伊人如烟阅读 2,607评论 0 0
  • 翱翔人生阅读 1,215评论 0 0
  • 记得小时候经常对你说对你说的一句"那么凶肯定没人娶你"。没想到这一天就这样来了 大概在1998.10.02那天最高...
    呀呼啦阅读 3,081评论 0 0