Java 中的 String.intern()

class Test {     
	public static void main(String[] args) {         
			String hello = "Hello", lo = "lo";         
			System.out.println(hello == "Hello");         	  // true
			System.out.println(Other.hello == hello);         // true
			System.out.println(other.Other.hello == hello);   // true      
			System.out.println(hello == ("Hel"+"lo"));        // true 
			System.out.println(hello == ("Hel"+lo));          // false
			System.out.println(hello == ("Hel"+lo).intern()); // true    
		} 
	} 
		
class Other { static String hello = "Hello"; }

package other; 
public class Other { public static String hello = "Hello"; }
  1. 相同 package 中同一个类里同名字面量 “Hello” 的引用,指向同一个 String 对象;
  2. 相同 package 中不同类里同名字面量 “Hello” 的引用,指向同一个 String 对象;
  3. 不同 package 中不同类里同名字面量 “Hello” 的引用,指向同一个 String 对象;
  4. 字符串在编译期拼接后被视为一个字面量;
  5. 字符串在运行期拼接后,并不被视为一个字面量;
  6. intern 方法,可以显式的指向对应字面量所指的 String 对象;

Java 中所有的类共享一个字符串常量池。比如 A 类中需要一个 “hello” 的字符串常量,B类也需要同样的字符串常量,他们都是从字符串常量池中获取的字符串,并且获得得到的字符串常量的地址是一样的。Java 在设计字符串常量池的时候,使用了一张 stringtable 表,它里面保存了字符串的引用。

你可能感兴趣的:(编程语言,Java,String,intern)