字符串是懒加载的,运行的时候相同的字符串会在串池中保存,怎么去证明这件事呢?其实方法很简单,我们利用Idea中的调试就可以看到内存中对象的状态。
准备代码:
import com.sun.tools.attach.AttachNotSupportedException;
import sun.tools.attach.HotSpotVirtualMachine;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
/**
* 字符串延迟加载的证明
*/
public class StringLazyLoad {
public static void main(String[] args) {
System.out.println("h");
System.out.println("a");
System.out.println("b");
for(int i=0;i<200;i++){
System.out.println("a");
}
System.out.println("c");
System.out.println("d");
System.out.println("e");
System.out.println("f");
for(int i=0;i<200;i++){
System.out.println("a"+i);
}
System.out.println("g");
}
}
直接断点查看字符串的个数,到18行的时候是1227
我们执行到b,字符串的个数是1228,说明是在执行的时候才会加载实例
我们执行到24行,发现字符串实例的个数1229,并没有因为循环的次数增加200个实例
说明我们的字符串对象不是来一次新建一次的。