问题标签 [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 - 盒装原语和等价
所以今天被问到这个问题。
这个程序会打印出什么?它返回真。我回答说,由于我对自动(和自动取消)装箱的理解,它总是会打印出错误的。我的印象是分配 Integer a = 3 将创建一个新的 Integer(3) 以便 == 将评估引用而不是原始值。
谁能解释一下?
java - Java 自动拆箱 - 是否有编译器警告?
我是 Java 自动装箱的忠实粉丝,因为它节省了很多丑陋的样板代码。但是,我发现在 Number 对象可能为空的某些情况下,自动拆箱会让人感到困惑。有什么方法可以检测代码库中发生自动拆箱的位置并带有 javac 警告?任何其他仅检测拆箱事件的解决方案(例如 FindBugs 或 Eclipse 特定的编译器警告)将不胜感激,因为我找不到任何解决方案。
为了澄清,我不希望在装箱时产生任何警告 - 只拆箱。
下面是一些可能导致混淆 NullPointerExceptions 的代码的简单示例:
java - Java = 运算符
我怎样才能在我的课堂上重现这种行为?
java - Java:设置 Integer = null 可以吗?
如果参数存在于数据库中,我有一个返回 id 号的函数。如果不是,则返回 null。这是在乞求空指针异常吗?不允许使用负 id 编号,但我认为让不存在的参数返回 null 而不是像 -1 这样的错误代码会更清楚。你怎么看?
java - Java中的自动装箱与手动装箱
为什么第二段代码更快?
java - java.lang.Object o = 1;//为什么会编译?
我正在做这些在线 Java 测试之一,我被问到这个问题:
问:指出正确的分配:
在您继续之前,请自己尝试一下。
好吧,我可以告诉你我弄错了,我调查了一下,发现:
有人能说出原因吗:
Object o = 1;
和Object o = "1";
在这两种情况下编译并输出 1,这让我很困惑。
非常感谢
java - JNI 新的原始类型
我们如何在 JNI 中创建新的原始类型。我有一个返回jobject
. 可以返回jint
,jchar
等。
有,NewString
为什么没有NewInteger
,,,等等。目前在 JNI 层没有自动装箱。NewCharacter
NewDouble
我可以进行NewObject
调用,但是创建原始类型的开销太大。
我有包装函数来获取 Class 和 MethodID。
java - 为什么编译器/JVM 不能让自动装箱“正常工作”?
自动装箱相当可怕。虽然我完全理解 和 之间的区别,==
但.equals
我不禁要让我的以下错误彻底消失:
那打印
他们为什么这样做?它与缓存的整数有关,但如果是这种情况,他们为什么不缓存程序使用的所有整数呢?或者为什么 JVM 不总是自动拆箱到原始?
打印 false false 或 true true 会更好。
编辑
我不同意旧代码的破坏。通过foo.get(0) == bar.get(0)
return true 你已经破坏了代码。
这不能通过在字节码中用 int 替换 Integer 来在编译器级别解决(只要它从未被分配为 null)
java - 复合分配的自动(取消)装箱失败
由于复合赋值和递增/递减运算符中的隐式转换,以下编译:
并且由于自动装箱和自动拆箱,以下内容也可以编译:
然而,以下代码段中的最后一行给出了编译时错误:
谁能帮我弄清楚这里发生了什么?该byte b
版本编译得很好,所以不应该Byte bb
效仿并根据需要进行适当的装箱和拆箱以适应吗?
额外的问题
那么有没有办法让复合赋值运算符与左侧的 , 和 一起使用,或者它们Byte
对于Character
这些类型来说只是非法的(!!!) ?Short
java - 是否保证 new Integer(i) == i 在 Java 中?
考虑以下代码段:
很明显,为什么最后一行总是会打印"false"
:我们正在使用==
引用标识比较,并且new
对象永远不会与==
已经存在的对象相关。
问题是关于前 3 行:这些比较是否保证在原语int
上,Integer
自动拆箱?是否存在原语会被自动装箱并执行参考身份比较的情况?(那将是false
!)