String类的两种构实例化方式
实例化方式 | 产生实例化对象数 | 是否入字符串常量池 | 是否可以实现重用 |
---|
直接赋值 | 一个 | 自动加入字符串常量池 | 可以重用 |
构造方法 | 两个 | 不会自动入池,可以手工入池 | 注入池中才可重用 |
说明:
- 1.使用构造方法进行实例时,JVM会开辟两块堆空间。只使用其中的一块,另外一个由于字符串常量所定义的匿名对象将成为我们的垃圾空间。
- 2 .用构造方法实例化对象时,可以使用
intern
方法手工注入常量池中,但是一定要在new的时候调用,实例化完成后再调用就没用用了。
测试:
public class Test {
public static void main(String[] args) {
String a="123";
String b="123";
System.out.println(a==b);
String c=new String("134");
String d=new String("134");
System.out.println(c==d);
String e=new String("123").intern();
System.out.println(a==e);
String f=new String("123");
f.intern();
System.out.println(a==f);
String g=new String("145").intern();
String h="145";
System.out.println(g==h);
}
}