问题标签 [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.
java - 比较 Java 中的双打给出了奇怪的结果
我真的无法理解为什么会发生以下情况:
然而,这按预期工作:
我很肯定这在某种程度上与自动装箱有关,但我真的不知道为什么在使用运算符和何时调用0
时会以不同的方式装箱==
.equals
。
这不是隐含违反equals
合同吗?
编辑:
感谢您的快速回答。我认为它的装箱方式不同,真正的问题是:为什么装箱方式不同?我的意思是,如果d == 0d
比d.equals(0d)
直观和预期的更直观,但是如果d == 0
看起来像一个Integer
,那么true
“直观”d.equals(0)
也应该是正确的。
java - 哪个更好:让 Java 进行自动装箱或使用 valueOf()
我只是想知道让java autobox说一个整数有什么区别:
或将您的代码设置为
这有什么微优化吗?我知道第二个更明确,但也更不必要的打字,除此之外有什么区别吗?
java - 双精度和整数转换
我试图弄清楚这一点:
为什么打印 chiSquare,打印零,而打印 1/841 给出双精度值?哈希表是<String, Integer>
java - 为什么 Java 中不缓存整数?
我知道关于这个主题有类似的帖子,但它们并没有完全解决我的问题。当你这样做时:
这将(显然)true
大部分时间打印,因为 [-128, 127] 范围内的整数以某种方式被缓存。但:
将返回false
。我知道我要求的是 Integer 的新实例,但是由于盒装原语在 Java 中是不可变的,并且机器已经可以做“正确的事情”(如第一种情况所示),为什么会发生这种情况?
如果具有 10 的 Integer 的所有实例都是内存中的同一个对象,这不是更有意义吗?换句话说,为什么我们没有类似于“字符串实习”的“整数实习”?
更好的是,如果表示相同事物的装箱原语的实例(无论值(和类型)如何)是同一个对象,那不是更有意义吗?或者至少正确回应==
?
java - Java 原语实现
Java 具有基本类型的对象整数和原始版本 int。
原始版本更快/更轻/等。所以一般来说你应该使用它们。
我想知道的是,为什么 Java 的设计者不仅拥有对象类型,还使用原始版本作为幕后的优化。
所以:
将被编译成类似的代码:
本质上,这个假设的 Java 编译器会将 Integer、Double、Float 等实例转换为等效的原始类型。只有在真正需要对象的情况下(比如将元素放入容器中)才会涉及实际的 Integer 对象。
注意:上面的代码在 Integer 对象上使用了运算符,我知道这实际上是不允许的。因为我正在发明假设的 Java 编译器,所以我会假装这个编译器对 Integer/Float/Double 有特殊的外壳,就像对 String 一样。
java - Java:整数对象数组的自动装箱,从 LinkedList.toArray() 转换为 int
我想使用类似于以下的代码:
...
但是,这是不允许的,显然Integer[]
转换为int[]
. letterIndex
如果不声明asInteger[]
而不是 ,我将如何完成等效操作int[]
?
performance - 为什么 Scala 的标准库中 @specialized 的东西这么少?
我在@specialized
Scala 2.8.1的标准库的源代码中搜索了使用。看起来只有少数特征和类使用此注释:Function0
, Function1
, Function2
, Tuple1
, Tuple2
, Product1
, Product2
, AbstractFunction0
, AbstractFunction1
, AbstractFunction2
。
集合类都不是@specialized
. 为什么不?这会产生太多的类吗?
这意味着使用原始类型的集合类是非常低效的,因为会有很多不必要的装箱和拆箱。
拥有 s的不可变列表或序列(具有IndexedSeq
特征)的最有效方法是什么Int
,避免装箱和拆箱?
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,但暂时我们坚持使用它。
scala - 如何在 Scala 中发现装箱/拆箱
根据最近extempore关于如何让 scala 通过查看字节码来告诉我是否正在进行装箱的建议,我创建了这个类:
查看了以下字节码foo
:
那里没有装箱/拆箱的迹象。但是我还是很疑惑,所以用-print
()编译了一下:
关于这段代码的主要观察是,创建的匿名函数已被专门化,Long => Double
并且该map
功能由longArrayOps(ls).map
( ArrayOps
is not dedicated ) 提供。
问题是:“在这个例子中是否发生了装箱/拆箱?”