java中的intern方法

当调用intern()方法,如果常量池中已经有对应String的字符串(通过equals判断),就返回常量池中对应字符串的引用地址

例子:

    public static void main(String[] args) {
        String a = "a";
        String b = "b";
        String str1 = a + b;
        String str2 = "ab";
        String str3 = new String("ab");
        System.out.println(str1 == str2);
        System.out.println(str1.intern() == str2);
        System.out.println(str3 == str2);
        System.out.println(str3.intern() == str2);
        System.out.println(str3.intern() == str1.intern());
    }

输出:
false
true
false
true
true

变量a和b是放到常量池里面的,a+b首先在堆里面新开一个空间存放”ab”,然后把引用地址给了str1,str2也是放到了常量池里面,str3直接在堆里面开了一个空间存放”ab”,把引用地址给了str3,所以str1、str2、str3肯定都不相等,str1.intern()之后,首先会在常量池里面查找”ab”常量,发现是有的(就是str2指向的内容),于是就返回了str2的内容,所以str1.intern() == str2为true,同理就有了str3.intern == str1.intern()为true

猜你喜欢

转载自blog.csdn.net/u014473112/article/details/80179514