字符串常量池的理解

  • 字符串常量池

JVM为了减少字符串对象的重复创建,其维护了一块特殊的内存,这段内存被称为字符串常量池(存储在方法区中)。

 

  • 具体实现

当代码中出现字符串时,JVM首先会对其进行检查。

①、如果字符串常量池中存在相同内容的字符串对象,则将这个对象的地址返回

②、如果字符串常量池中不存在相同内容的字符串对象,则创建一个新的字符串对象并放入常量池

 

class T1 {
	public String s1 = "test";
}

class T2 {
	public String s2 = "test";
}

public class StringTest {
	public static void main(String[] args) {
		System.out.println(new T1().s1 == new T2().s2);  //true
	}
}

 

new String("test")时,首先也会去检查常量池是否存在“test”(存在则不创建、不存在则在常量池先创建一个),然后在堆空间再开辟一块内存区域创建字符串对象 。

 

  • 实现前提

java中String对象是不可变的(使用final修饰),这样可以安全保证多个变量共享同一个对象。如果String对象可变,一个引用改变了对象的值,那么其他变量的值也会跟着受影响,显然不合理。

猜你喜欢

转载自kk-liang.iteye.com/blog/2271568