欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

String池(The String Pool)

程序员文章站 2022-03-16 13:09:45
...
Sun用一个叫String池的东东来优化对String的处理。这个String池使很多Java新人感到迷惑。String池是一个用来缓存创建过的String对象的区域。一个需要注意的地方是String池只有对那些用‘literals’创建的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池中。
相关标签: java String