【问题标题】:Unnecessary boxing inspection reported by IDEIDE 报告的不必要的装箱检查
【发布时间】:2014-08-12 13:20:26
【问题描述】:

IDE 报告的不必要的装箱检查

我最近查看了一些发布在 Oracle 教程上的有关 Swing#JTable 的代码。 IntelIJ 返回了一些警告消息,这些消息是关于在保存表数据的多维数组中对原始变量进行装箱的。


这是从docs.oracle.com中找到的数组:

Object[][] data = {
            {"Kathy", "Smith",
                    "Snowboarding", new Integer(5), new Boolean(false)},
            {"John", "Doe",
                    "Rowing", new Integer(3), new Boolean(true)},
            {"Sue", "Black",
                    "Knitting", new Integer(2), new Boolean(false)},
            {"Jane", "White",
                    "Speed reading", new Integer(20), new Boolean(true)},
            {"Joe", "Brown",
                    "Pool", new Integer(10), new Boolean(false)}
    };

所有包装变量都收到此消息:

“不必要的拳击'new Integer(5)' 报告“拳击”,例如在对象中包装原始值。在 Java 5 和更新版本下,装箱是不必要的,可以安全地删除。 此检查仅报告项目或模块是否配置为使用 5.0 或更高的语言级别。”


我知道 Java 中的装箱和拆箱的概念,我的问题是为什么它在较新版本的 Java 中是“不相关”,因为我看到许多开发人员最近讨论或使用它.

另外,由于不需要装箱,应该用什么替换'new Integer(5)'?

【问题讨论】:

    标签: java ide


    【解决方案1】:

    感谢 Java 5 和更新版本中的自动装箱,您不必调用 Integer 和 Boolean 构造函数来手动“装箱”原始值。 IDE 似乎建议您将代码编写为:

    Object[][] data = {
                {"Kathy", "Smith", "Snowboarding", 5, false},
                {"John", "Doe", "Rowing", 3, true},
                {"Sue", "Black", "Knitting", 2, false},
                {"Jane", "White", "Speed reading", 20, true},
                {"Joe", "Brown", "Pool", 10, false}
        };
    

    【讨论】:

    • 谢谢 Joni,请问这有什么好处?显然忽略了编写更少代码的需要
    • @Juxhin Boolean auto(un)boxing 使用 Boolean.FALSEBoolean.TRUE 而不是创建新的 Boolean 实例,因此您的开销更少。类似地,Integer 维护一个私有缓存 Integer 对象,代表 -128+127,如果可以,自动(取消)装箱将使用这些对象而不是创建新实例。要么让编译器为你自动(取消)框,要么使用.valueOf() 方法,它首先检查缓存。
    • @JonK 非常感谢 JonK 的解释!
    • 除了节省一点内存之外,自动装箱还为使用引用语义的比较提供了一定的保证。例如,由于自动装箱布尔值将是 Boolean.TRUE 或 Boolean.FALSE,而不是其他一些 Boolean 实例,您可以直接将它们与 == 运算符进行比较。否则你将不得不使用equals 方法。
    猜你喜欢
    • 2013-11-07
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多