字符串是懒加载的,运行的时候相同的字符串会在串池中保存,怎么去证明这件事呢?其实方法很简单,我们利用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个实例
说明我们的字符串对象不是来一次新建一次的。