字符串懒加载的证明

简介: 字符串懒加载的证明

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

说明我们的字符串对象不是来一次新建一次的。

目录
相关文章
|
设计模式 消息中间件 JavaScript
巧用『责任链模式』来优化 参数多重校验,非常优雅!
巧用『责任链模式』来优化 参数多重校验,非常优雅!
巧用『责任链模式』来优化 参数多重校验,非常优雅!
|
5天前
|
前端开发 JavaScript C++
前端 JS 经典:判断数组的准确方法
前端 JS 经典:判断数组的准确方法
6 0
|
2月前
|
JavaScript 前端开发
Js数据类型判断都有哪几种方式?至少说出5种?它们的区别是什么?
Js数据类型判断都有哪几种方式?至少说出5种?它们的区别是什么?
33 0
feof用法重点详解(易被误用判断文件结束!!!)
feof用法重点详解(易被误用判断文件结束!!!)
|
JSON API 数据格式
利用注解 + 反射消除重复代码,妙
利用注解 + 反射消除重复代码,妙
87 0
|
数据可视化 Java Python
join()方法的神奇用处与Intern机制的软肋
照例先总结下本文内容:(1)join() 方法除了在拼接字符串时速度较快,它还是目前看来最通用有效的复制字符串的方法 (2)Intern 机制(字符串滞留)并非万能的,本文探索一下它的软肋有哪些
142 0
join()方法的神奇用处与Intern机制的软肋
面试官:写一下双重检测单例模式,解释一下每一行,volatile的作用,不加会有什么问题,去掉第一层循环会有什么问题,去掉第二层循环会有什么问题。
面试官:写一下双重检测单例模式,解释一下每一行,volatile的作用,不加会有什么问题,去掉第一层循环会有什么问题,去掉第二层循环会有什么问题。
122 0
|
JavaScript 前端开发
#yyds干货盘点#【js学习笔记六】数组双重去重的方式五对象属性去重
#yyds干货盘点#【js学习笔记六】数组双重去重的方式五对象属性去重
103 0
#yyds干货盘点#【js学习笔记六】数组双重去重的方式五对象属性去重
|
JavaScript 前端开发
#yyds干货盘点#【js学习笔记四】数组双重去重的方式三filter
#yyds干货盘点#【js学习笔记四】数组双重去重的方式三filter
111 0
#yyds干货盘点#【js学习笔记四】数组双重去重的方式三filter