String池(The String Pool)
程序员文章站
2022-03-16 13:06:57
...
Sun用一个叫String池的东东来优化对String的处理。这个String池使很多Java新人感到迷惑。String池是一个用来缓存创建过的String对象的区域。一个需要注意的地方是String池只有对那些用‘literals’创建的String起作用。也就是说用构造器创建的String对象不会存到String池中。请看下面一个例子:
运行结果如下
s1 = abc
s2 = abc
s1 == s2? true
s1.equals(s2)? true
如果你想创建一个在内存中全新的String对象,可以用构造器创建一个String对象,因为他们不会被放到String池中。
运行结果如下
s1 = abc
s2 = abc
s1 == s2? false
s1.equals(s2)? true
String有一个方法我们需要在这里介绍一下:intern(),这个方法会返回一个String对象,如果被调用的String对象能在String池中找到一个和它一样的(字面上相同)对象,就返回这个String池中的对象。如果找不到的话,就返回一个新的String对象,并把这个String对象放到String池中。
public class Main { public static void main(String[] args) { String s1 = "abc"; String s2 = "abc"; System.out.println("s1 = " + s1); System.out.println("s2 = " + s2); System.out.println("s1 == s2? " + (s1 == s2)); System.out.println("s1.equals(s2)? " + (s1.equals(s2))); } }
运行结果如下
引用
s1 = abc
s2 = abc
s1 == s2? true
s1.equals(s2)? true
如果你想创建一个在内存中全新的String对象,可以用构造器创建一个String对象,因为他们不会被放到String池中。
public class Main { public static void main(String[] args) { String s1 = "abc"; String s2 = new String("abc"); System.out.println("s1 = " + s1); System.out.println("s2 = " + s2); System.out.println("s1 == s2? " + (s1 == s2)); System.out.println("s1.equals(s2)? " + (s1.equal(s2))); } }
运行结果如下
引用
s1 = abc
s2 = abc
s1 == s2? false
s1.equals(s2)? true
String有一个方法我们需要在这里介绍一下:intern(),这个方法会返回一个String对象,如果被调用的String对象能在String池中找到一个和它一样的(字面上相同)对象,就返回这个String池中的对象。如果找不到的话,就返回一个新的String对象,并把这个String对象放到String池中。
上一篇: Deepin学习笔记
推荐阅读
-
asp.net下DataSet.WriteXml(String)与(Stream)的区别
-
java.lang.String 类的所有方法
-
JVM内存分配及String常用方法解析
-
String、StringBuffer和StringBuilder类的区别
-
c++ string类型成员变量在调用构造函数后未能正确赋值
-
java中String和StringBuffer的区别
-
全面解释java中StringBuilder、StringBuffer、String类之间的关系
-
jdk中String类设计成final的原由
-
ListView的Adapter使用 之 初学ArrayAdapter String
-
Python 多进程并发操作中进程池Pool的实例