java使用两对大括号添加集合元素的问题

使用两对大括号实际上是创建了一个内部类,并在内部类内部使用代码块的方式在创建对象的时候进行初始化

ArrayList list = new ArrayList<>(){{
            add(1);
            add(2);
        }};

这样写看似优雅,其实有非常大的隐患,我们都知道,内部类对象的创建是依托于外部类对象的,在这个内部类对象里面会持有外部类对象的引用,当把这个list传递给外部使用的时候,这个list所在的类的对象是没有办法垃圾回收的,进而造成内存泄漏。

举例说明:

public class DebugListTest {

    private String name;

    public static void main(String[] args) {
        DebugListTest debugListTest = new DebugListTest();
        List list = debugListTest.getList();
    }

    List getList() {
        ArrayList list = new ArrayList<>() {{
            add(1);
            add(2);
        }};
        return list;
    }
}

将上面代码编译后会多出来一个 DebugListTest$1.class,反编译以后如下

class DebugListTest$1 extends ArrayList {
    DebugListTest$1(DebugListTest var1) {
        this.this$0 = var1;
        this.add(1);
        this.add(2);
    }
}

可以看到它把外层对象作为构造器参数传递给了 this$0,也就是说这个内部类对象拿着创建这个内部类对象的外部类对象的引用。

其次,多了一个内部类就多了一个.class文件,也就是多了一个类型,类加载器加载后维护这个类型也无疑增加了不必要的负担。

Original: https://www.cnblogs.com/bingmous/p/16000579.html
Author: Bingmous
Title: java使用两对大括号添加集合元素的问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684234/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 安装 CentOS 7

    1、VMware虚拟机安装 2、CentOS操作系统安装 3、CentOS操作系统配置 3.1、选择语言 3.2、网络和主机名 3.3、日期和时间 3.4、安装位置 3.5、开始安…

    技术杂谈 2023年7月11日
    082
  • 硬件设备技术与市场产业

    硬件设备技术与市场产业 参考文献链接 https://mp.weixin.qq.com/s/0j9X8CwUB07taK6iZ6yL4Q https://mp.weixin.qq….

    技术杂谈 2023年5月31日
    094
  • 树的直径

    树的直径 题目描述 树中两点间的不重复经过的边和点道路称为两点的路径,路径的长度(路径上所经边的长度和)称为两点的距离。圆的直径是一个圆的最长的一条弦,而树的直径是树中两点间最长的…

    技术杂谈 2023年7月11日
    071
  • 使用C语言实现一个自动刷弹幕的程序

    本文使用两种方式来进行刷弹幕操作1 模拟键盘输入,自动输入文字,然后点击回车。2 操作剪切板,直接将剪切板的文字粘贴到输入框,然后回车。 模拟键盘输入 如果要输入”弹幕…

    技术杂谈 2023年6月21日
    091
  • html大文件传输解决方案

    1、介绍enctype enctype 属性规定发送到服务器之前应该如何对表单数据进行编码。 enctype作用是告知服务器请求正文的MIME类型(请求消息头content-typ…

    技术杂谈 2023年5月30日
    084
  • 亚马逊 IOS sts s3上传

    1 // aws oss 2 AWSBasicSessionCredentialsProvider *credentialsProvider = [[AWSBasicSession…

    技术杂谈 2023年5月31日
    078
  • 在Linux下配置RealVNC和TigerVNC

    作者:alittlemc | 更新中 | 原创文章,可能有技术理解错误,欢迎指正,请与我联系,谢谢! 命令和快速总结 realvnc创建# :会话id -name 取名字 -dep…

    技术杂谈 2023年6月21日
    0102
  • 心存好奇,心怀敬意

    走出舒适圈难,是因为走出去,除了要吃学习的苦,还要忍受心里的苦。 看到郭德纲的一段话: 从出生就挨打,一天八个嘴巴。这到 25 岁,铁罗汉活金刚一样,什么都不在乎。吃亏要趁早,一帆…

    技术杂谈 2023年7月11日
    098
  • WIN7系统有些文本乱码怎么办

    有些文本工具无法编辑中文 打开控制面板,找到语言设置 区域和语言,更改系统区域设置,改成中文,重启 本文为博主原创文章,未经博主允许不得转载。 posted @2018-08-19…

    技术杂谈 2023年5月31日
    0103
  • make 参数 ARCH与CROSS_COMPILE***

    make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig 这时什么意思呢? ARCH 即architecture…

    技术杂谈 2023年5月31日
    072
  • 原型模式(创建型)

    原型模式 介绍 定义:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。 简单理解,就是当需要创建一个指定的对象时,我们刚好有一个这样的对象,但是又…

    技术杂谈 2023年6月21日
    0112
  • MybatisPlus拓展——实现多数据源操作

    多数据源 适用:一般工作时候会有多个数据库,每个库对应不同的业务数据。程序如果每次数据都访问同一个数据库,该数据库压力很大访问会很慢。 1、导入依赖 com.baomidou dy…

    技术杂谈 2023年7月11日
    083
  • 判断字符串是否为ISO编码,如果是则转换

    string test = @”已实缴”;// test = “南京不木人力资源有限公司”;if (IsValidISO…

    技术杂谈 2023年5月31日
    077
  • 基于Multisim的buck降压斩波电路仿真

    和boost电路相反,buck电路为DC-DC降压电路,搞了一下仿真发现低压情况下降压效率比較高,电压略微高一点降压效率就不敢恭维了。 。不知道是怎么回事 仿真电路: 占空比D设置…

    技术杂谈 2023年5月31日
    080
  • 开源IPTV源服务程序使用教程

    前言 我的目标是将程序打造成属于每个人的直播源服务,且对每个人完全开源免费!可作为家庭影院电视、视频等流媒体的提供商,兼容全平台,只需使用视频播放器调用接口链接即可享用,不多说开始…

    技术杂谈 2023年6月21日
    0271
  • 【论文写作】使用overleaf撰写你的会议论文

    @ 前言 overleaf详细使用 处理share链接 处理文件压缩包 overleaf常见功能 一个Latex项目的构成 .tex文件的基本架构 常用的tex命令 \usepac…

    技术杂谈 2023年7月24日
    0114
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球