String 的intern()了解一下

String 的intern()了解一下

看这篇文章总结一下:Java intern() 方法|菜鸟教程

public native String intern();

说明:intern() 方法返回字符串对象的规范化表示形式。
例子:

 public static void main(String[] args) {
        String s1 = "abc";
        String intern = s1.intern();
        System.out.println(intern);
    }

返回值:

abc

intern()、“ == ”、equals()

public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "a" + "b" + "c";
        String s3 = "ab" + "c";
        String s4 = new String("abc");
        //定义新变量 c
        String c = "c";
        String s5 = "ab" + c;

        //用 “==” 判断
        System.out.println(s1 == s2); //true
        System.out.println(s1 == s3); //静态字符串相加,结果为 true
        System.out.println(s1 == s4); //用new 创建新对象,结果为 false
        System.out.println(s1 == s5); //用变量相加 结果为 false
        System.out.println(s2 == s3); //静态字符串相加,结果为 true

        System.out.println();
        //用equals() 判断
        System.out.println(s1.equals(s2)); //true
        System.out.println(s1.equals(s3)); //静态字符串相加,结果为 true
        System.out.println(s1.equals(s4)); //用new 创建新对象,结果为 true
        System.out.println(s1.equals(s5)); 用变量相加 结果为 true
        System.out.println(s2.equals(s3)); //静态字符串相加,结果为 true
        System.out.println();
//        //用 intern()判断
        System.out.println(s1.intern() == s2); //true
        System.out.println(s1.intern() == s3); //静态字符串相加,结果为 true
        System.out.println(s1.intern() == s4); //用new 创建新对象,结果为 false
        System.out.println(s1.intern() == s5); 用变量相加 结果为false
        System.out.println(s2.intern() == s3); //静态字符串相加,结果为 true
//        -----------------------------------------------
        System.out.println(s1.intern() == s2.intern()); //true
        System.out.println(s1.intern() == s3.intern()); //静态字符串相加,结果为 true
        System.out.println(s1.intern() == s4.intern()); //用new 创建新对象,结果为 true
        System.out.println(s1.intern() == s5.intern()); 用变量相加 结果为true
        System.out.println(s2.intern() == s3.intern()); //静态字符串相加,结果为 true
    }

总结

  1. 采用new 创建的字符串对象不进入字符串池。字符串相加的时候,都是静态字符串的结果会添加到字符串池,如果其中含有变量则不会进入字符串池中。
  2. 在定义变量的时候赋值,如果赋值的是静态的字符串,就会执行进入字符串池的操作,如果池中含有该字符串,则返回引用。
  3. 两个字符串用intern() 判断相当于 用equals()判断
  4. equals() 判断的是内容, " == " 判断的是地址。
上一篇:String


下一篇:浅谈String.intern()方法