问题标签 [autoboxing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
20902 浏览

java - 比较 Java 中的双打给出了奇怪的结果

我真的无法理解为什么会发生以下情况:

然而,这按预期工作:

我很肯定这在某种程度上与自动装箱有关,但我真的不知道为什么在使用运算符和何时调用0时会以不同的方式装箱==.equals

这不是隐含违反equals合同吗?

编辑

感谢您的快速回答。我认为它的装箱方式不同,真正的问题是:为什么装箱方式不同?我的意思是,如果d == 0dd.equals(0d)直观和预期的更直观,但是如果d == 0看起来像一个Integer,那么true“直观”d.equals(0)也应该是正确的。

0 投票
4 回答
791 浏览

java - 为什么此示例中的 Integer.valueOf(...) 比较返回不同的值?

关于 java 中原始类型和自动装箱的问题的答案:

对于 biziclop:

类 biziclop {

}

结果是:

这是为什么?

0 投票
3 回答
6551 浏览

java - 哪个更好:让 Java 进行自动装箱或使用 valueOf()

我只是想知道让java autobox说一个整数有什么区别:

或将您的代码设置为

这有什么微优化吗?我知道第二个更明确,但也更不必要的打字,除此之外有什么区别吗?

0 投票
2 回答
9236 浏览

java - 双精度和整数转换

我试图弄清楚这一点:

为什么打印 chiSquare,打印零,而打印 1/841 给出双精度值?哈希表是<String, Integer>

0 投票
15 回答
7120 浏览

java - 为什么 Java 中不缓存整数?

我知道关于这个主题有类似的帖子,但它们并没有完全解决我的问题。当你这样做时:

这将(显然)true大部分时间打印,因为 [-128, 127] 范围内的整数以某种方式被缓存。但:

将返回false。我知道我要求的是 Integer 的新实例,但是由于盒装原语在 Java 中是不可变的,并且机器已经可以做“正确的事情”(如第一种情况所示),为什么会发生这种情况?

如果具有 10 的 Integer 的所有实例都是内存中的同一个对象,这不是更有意义吗?换句话说,为什么我们没有类似于“字符串实习”的“整数实习”?

更好的是,如果表示相同事物的装箱原语的实例(无论值(和类型)如何)是同一个对象,那不是更有意义吗?或者至少正确回应==

0 投票
2 回答
884 浏览

java - Java 原语实现

Java 具有基本类型的对象整数和原始版本 int。

原始版本更快/更轻/等。所以一般来说你应该使用它们。

我想知道的是,为什么 Java 的设计者不仅拥有对象类型,还使用原始版本作为幕后的优化。

所以:

将被编译成类似的代码:

本质上,这个假设的 Java 编译器会将 Integer、Double、Float 等实例转换为等效的原始类型。只有在真正需要对象的情况下(比如将元素放入容器中)才会涉及实际的 Integer 对象。

注意:上面的代码在 Integer 对象上使用了运算符,我知道这实际上是不允许的。因为我正在发明假设的 Java 编译器,所以我会假装这个编译器对 Integer/Float/Double 有特殊的外壳,就像对 String 一样。

0 投票
2 回答
1494 浏览

java - Java:整数对象数组的自动装箱,从 LinkedList.toArray() 转换为 int

我想使用类似于以下的代码:

...

但是,这是不允许的,显然Integer[]转换为int[]. letterIndex如果不声明asInteger[]而不是 ,我将如何完成等效操作int[]

0 投票
3 回答
6610 浏览

performance - 为什么 Scala 的标准库中 @specialized 的东西这么少?

我在@specializedScala 2.8.1的标准库的源代码中搜索了使用。看起来只有少数特征和类使用此注释:Function0, Function1, Function2, Tuple1, Tuple2, Product1, Product2, AbstractFunction0, AbstractFunction1, AbstractFunction2

集合类都不是@specialized. 为什么不?这会产生太多的类吗?

这意味着使用原始类型的集合类是非常低效的,因为会有很多不必要的装箱和拆箱。

拥有 s的不可变列表或序列(具有IndexedSeq特征)的最有效方法是什么Int,避免装箱和拆箱?

0 投票
2 回答
2105 浏览

maven - 如何使用axis2-wsdl2code-maven-plugin设置-Euwc参数?

我们正在使用axis2来生成Web服务客户端,(我现在后悔了!)。使用axis2命令行工具,您可以通过开关 -Euwc 将 int 包装成 Integer,将 boolean 包装成 Boolean 等等。这是告诉axis2某些int或boolean值在模式中可以为nillable的一种方法。

我的问题是如何通过 POM 或其他方式使用 Maven 设置此参数以实现与生成的源相同的行为?我的 stackoverflow 和谷歌搜索并没有透露太多信息。有一个 Jira 问题,似乎在没有指明正确方向的情况下被开发人员关闭。

在配置中将 unwrap 设置为 true 并没有帮助,因为它是一个不同的选项。我会在未来避免使用axis2,但暂时我们坚持使用它。

0 投票
2 回答
2309 浏览

scala - 如何在 Scala 中发现装箱/拆箱

根据最近extempore关于如何让 scala 通过查看字节码来告诉我是否正在进行装箱的建议,我创建了这个类:

查看了以下字节码foo

那里没有装箱/拆箱的迹象。但是我还是很疑惑,所以用-print()编译了一下:

关于这段代码的主要观察是,创建的匿名函数已被专门化,Long => Double并且该map功能由longArrayOps(ls).map( ArrayOpsis not dedicated ) 提供。

问题是:“在这个例子中是否发生了装箱/拆箱?”