问题标签 [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 投票
4 回答
4990 浏览

java - 盒装原语和等价

所以今天被问到这个问题。

这个程序会打印出什么?它返回真。我回答说,由于我对自动(和自动取消)装箱的理解,它总是会打印出错误的。我的印象是分配 Integer a = 3 将创建一个新的 Integer(3) 以便 == 将评估引用而不是原始值。

谁能解释一下?

0 投票
4 回答
3549 浏览

java - Java 自动拆箱 - 是否有编译器警告?

我是 Java 自动装箱的忠实粉丝,因为它节省了很多丑陋的样板代码。但是,我发现在 Number 对象可能为空的某些情况下,自动拆箱会让人感到困惑。有什么方法可以检测代码库中发生自动拆箱的位置并带有 javac 警告?任何其他仅检测拆箱事件的解决方案(例如 FindBugs 或 Eclipse 特定的编译器警告)将不胜感激,因为我找不到任何解决方案。

为了澄清,我不希望在装箱时产生任何警告 - 只拆箱。

下面是一些可能导致混淆 NullPointerExceptions 的代码的简单示例:

0 投票
5 回答
334 浏览

java - Java = 运算符

我怎样才能在我的课堂上重现这种行为?

0 投票
14 回答
20734 浏览

java - Java:设置 Integer = null 可以吗?

如果参数存在于数据库中,我有一个返回 id 号的函数。如果不是,则返回 null。这是在乞求空指针异常吗?不允许使用负 id 编号,但我认为让不存在的参数返回 null 而不是像 -1 这样的错误代码会更清楚。你怎么看?

0 投票
3 回答
12931 浏览

java - Java中的自动装箱与手动装箱

为什么第二段代码更快?

0 投票
5 回答
1263 浏览

java - java.lang.Object o = 1;//为什么会编译?

我正在做这些在线 Java 测试之一,我被问到这个问题:

问:指出正确的分配:

在您继续之前,请自己尝试一下。

好吧,我可以告诉你我弄错了,我调查了一下,发现:

有人能说出原因吗:

Object o = 1;Object o = "1";

在这两种情况下编译并输出 1,这让我很困惑。

非常感谢

0 投票
2 回答
5189 浏览

java - JNI 新的原始类型

我们如何在 JNI 中创建新的原始类型。我有一个返回jobject. 可以返回jint,jchar等。

有,NewString为什么没有NewInteger,,,等等。目前在 JNI 层没有自动装箱。NewCharacterNewDouble

我可以进行NewObject调用,但是创建原始类型的开销太大。

我有包装函数来获取 Class 和 MethodID。

0 投票
6 回答
3004 浏览

java - 为什么编译器/JVM 不能让自动装箱“正常工作”?

自动装箱相当可怕。虽然我完全理解 和 之间的区别,==.equals我不禁要让我的以下错误彻底消失:

那打印

他们为什么这样做?它与缓存的整数有关,但如果是这种情况,他们为什么不缓存程序使用的所有整数呢?或者为什么 JVM 不总是自动拆箱到原始?

打印 false false 或 true true 会更好。

编辑

我不同意旧代码的破坏。通过foo.get(0) == bar.get(0)return true 你已经破坏了代码。

这不能通过在字节码中用 int 替换 Integer 来在编译器级别解决(只要它从未被分配为 null)

0 投票
1 回答
338 浏览

java - 复合分配的自动(取消)装箱失败

由于复合赋值和递增/递减运算符中的隐式转换,以下编译:

并且由于自动装箱和自动拆箱,以下内容也可以编译:

然而,以下代码段中的最后一行给出了编译时错误:

谁能帮我弄清楚这里发生了什么?该byte b版本编译得很好,所以不应该Byte bb效仿并根据需要进行适当的装箱和拆箱以适应吗?


额外的问题

那么有没有办法让复合赋值运算符与左侧的 , 和 一起使用,或者它们Byte对于Character这些类型来说只是非法的(!!!) ?Short

0 投票
2 回答
3163 浏览

java - 是否保证 new Integer(i) == i 在 Java 中?

考虑以下代码段:

很明显,为什么最后一行总是会打印"false":我们正在使用==引用标识比较,并且new对象永远不会==已经存在的对象相关。

问题是关于前 3 行:这些比较是否保证在原语int上,Integer自动拆箱?是否存在原语会被自动装箱并执行参考身份比较的情况?(那将是false!)