关于intern的有意思的一个小题目 ->之前知识回顾


关于intern的有意思的一个小题目 ->之前知识回顾

    jdk环境:1.8

    首先讲讲intern()方法

    1.7之前,会先去方法区内的常量池寻找,如果没有则创建,并返回指针

    1.7之后(包括1.7),不会再存储两份,找不到的话会返回堆中引用

    那我们应该就能猜到了,第一个输出为false的原因是因为常量池内初始化了"java"这个字符串,所以两个引用指向不同,为false

      第二个输出为true是因为指针的引用是相同的,都在堆内存

     写个代码证实我们的想法:

        关于intern的有意思的一个小题目 ->之前知识回顾

    String 字面量赋值的方式会存储到字符串常量池,所以可以直接用这个在比较地址之前,初始化一个字符串

    最后结果就是false,因为intern方法在常量池内找到了这个字符串,引用指向了他,而s1变量则指向堆内存