java 代码
- /**
- *
- * java JVM 对String对象的处理
- * test String. intern() 方法
- *
- */
- public class TestStringIntern {
- /**
- * @param args
- */
- public static void main(String[] args) {
- /*
- * 1.字面上的 "Hi" 字符串(字符串字面值string literal)将被自动 intern到虚拟机的字符串池中.
- * 2.不是字面上的String对象 通过调用 intern()方法,被intern到虚拟机的字符串池中.
- *
- * 虚拟机的字符串池由类 String 私有地维护。
- */
- String a = "Hi";
- String b = "Hi";
- String c = new String("Hi");
- System.out.println(a == b);// true
- System.out.println(a == c);// false
- c = c.intern();
- System.out.println(a == c);// true
- /*
- * 创建了两个对象
- * 1.字面"AA" ——被intern到虚拟机字符串池中了。
- * 2.new 操作符创建的 对象
- *
- * 由AA != AA.intern()可以看出:String AA = new String("AA");创建了两个对象。
- */
- String AA = new String("AA");
- System.out.println(AA == "AA");// false
- System.out.println(AA == AA.intern());// false
- System.out.println("AA" == AA.intern());// true
- /*
- * JAVA 规范中的例子:
- */
- String hello = "Hello", lo = "lo";
- System.out.print((hello == "Hello") + " "); //true
- System.out.print((hello == ("Hel"+"lo")) + " "); //true
- System.out.print((hello == ("Hel"+lo)) + " "); //false--lo为非literal的
- System.out.println(hello == ("Hel"+lo).intern());//true
- }
- }