两种String类对象实例化的区别:
- 直接赋值(String str = “字符串”):只会开辟一块堆内存空间,并且会自动保存在对象池中以供下次重复使用
- 构造方法(String str = new String(“字符串”)):会开辟两块堆内存空间,其中有一块空间将成为垃圾,并且不会自动入池,但是用户可以使用方法intern()方法手动入池。
例子:
package com.mydemo;
public class StringDemo {
public static void main(String args[]){
// 使用构造方法定义了新的内存空间,不会自动入池
// String strA = new String("对象池测试"); // 输出结果:false
// 开辟新对象并手动入池
String strA = new String("对象池测试").intern(); // 输出结果:true
// 直接赋值
String strB = "对象池测试";
System.out.println(strA == strB);
}
}