当前位置: 首页 > 知识库问答 >
问题:

Java中自动装箱的替代方案是什么?

方玄天
2023-03-14

任何Java程序员都知道,不能将int(或其他基元值)放入集合中。集合只能保存对象引用,因此您必须将基元值装箱到适当的包装类中(在int的情况下是整数)。当您将对象从集合中取出时,您将得到您放入的整数;如果您需要一个int,您必须使用intValue方法解压整数。所有这些打包和拆箱都是一种痛苦,会把你的代码弄得乱七八糟。自动装箱和拆箱功能使过程自动化,消除了痛苦和混乱。

是否有其他方法将基本类型转换为非基本类似类型?

共有3个答案

怀刚毅
2023-03-14

我认为您正在寻找一个实际包含基本数据类型的列表替代方案,而不是知道可以避免intValue调用(似乎您在问题文本的末尾已经知道这一点)。

Java类库中没有直接存储基本数据类型的List实现,但第三方库基本上支持这一点,例如Apache Commons的ArrayIntList。

好消息是,它计划允许原语类型用作Java10的泛型类型参数。然而,Java 10将在2018年左右到达。

陆展
2023-03-14

不确定为什么要放弃自动装箱和取消装箱功能。但这就是不使用它们的情况。

    int number = 5;
    Integer num = new Integer(number);
郗奇玮
2023-03-14

根本不需要intValue()

        List<Integer> list = new ArrayList();
        list.add(3);
        list.add(new Integer(70));
        int x = list.get(0) + 600;
        if (x > 800) {
            x = new Integer(80);
        }

(但可能存在一些陷阱…)

 类似资料:
  • 问题内容: 我们有一个类,其中包含应用程序的配置信息。它曾经是一个单身人士。经过一些体系结构审查后,我们被告知删除单例。我们确实看到了在单元测试中不使用单例的一些好处,因为我们可以一次测试所有不同的配置。 没有单例,我们必须在代码中的所有地方传递实例。变得太乱了,所以我们写了一个单例包装器。现在我们将相同的代码移植到PHP和.NET,我想知道是否有更好的模式可用于配置对象。 问题答案: 在谷歌测试

  • 问题内容: 为什么第二段代码更快? 问题答案: 自动装箱使用,内部将Integer对象缓存为小整数(默认情况下为-128至127,但是最大值可以使用“ java.lang.Integer.IntegerCache.high”属性进行配置-请参见Integer.valueOf的源代码) ,因此与直接调用不同。因为在调用之前可以快速检查整数值的大小,所以直接调用要快一些(尽管如果您有很多小整数,它会使

  • 问题内容: 我想将原语转换为字符串,然后尝试: 失败并显示以下错误: 现在,我知道原语不是引用类型(即不是对象),因此不能有方法。但是,Java 5引入了自动装箱和拆箱功能(一种C#…我在C#中从未喜欢过,但这不重要)。因此,通过自动装箱,我希望上面将myInt转换为Integer,然后在其上调用toString()。 此外,我相信C#允许这样的调用,除非我记错了。这仅仅是Java的自动装箱/拆箱

  • RxJava中是否有与RxAndroid中的AndroidSchedulers.mainThread()同义的Scheduler api。因此,如果我在一个新线程上安排一个任务,并且我想在Java主线程上观察它,我将如何做到这一点? 下面的edit是一个RxSubscription示例,带有system。在注释中,主线程被终止,而可观察线程被终止。interval在单独的线程上运行。在Androi

  • 我正在努力翻阅这本生锈的书。在“字符串”一章中,许多示例使用了_string(),我的编译器版本(rustc 1.0.0-dev)给出了以下警告 代码: 我从这个问题中了解到,这是因为API可能会更改,但我想知道如果我想转换字符串片段(str),我应该使用什么来代替它

  • 问题内容: 当我使用MSTest Framework并复制Selenium IDE为我生成的代码时,MSTest无法识别和。有什么替代方法? 问题答案: 您将分别使用和。