作用
串池,也就是StringTable,记录在串池里面的字符串可以复用,不用在堆里面重新开辟空间,极大减少了内存的占用并提高性能
记录方式
直接赋值
当我们使用String 变量名 = 内容
方式创建一个新的字符串时,JVM会先用equals方法判断串池中是否存在同样的值,如果存在则返回引用,如果不存在则先在串池中记录再返回引用。此时变量名记录的是地址值,但String类中重写了toString方法,所以在打印变量名时,能直接获得记录的内容
new关键字
当使用String 变量名 = new String(内容)
方法创建一个字符串时,JVM会先判断串池中是否存在该值,如果不存在就先在串池中记录,在到堆中开辟一个新的空间记录这个值;如果存在,则直接去堆中开辟空间记录。但无论串池中是否存在,JVM返回的都是堆中的地址值
验证
当我们使用直接赋值的方式创建一个字符串时,该字符串会记录在串池中,当再次用同样的方式创建一个同样内容的字符串时,会直接复用串池中的内容。可以使用==
比较来验证
tips: 当比较基本数据类型时,==
比较的是真实记录的值,当比较的是引用数据类型时,==
比较的就是堆里面所记录的地址值
所以我们可以用==
来比较他们的地址值是否一致,如果结果返回true,则代表地址值一致,也就是没有重新创建对象而是复用了串池中记录的数据
1 | String a = "abc"; |