java - 为什么 Java 自动装箱不扩展到自动装箱类型的方法的方法调用?

标签 java autoboxing

我想将原语转换为字符串,我试过了:

myInt.toString();

这失败并出现错误:

int cannot be dereferenced

现在,我知道原语不是引用类型(即,不是对象),因此不能有方法。然而,Java 5 引入了自动装箱和拆箱(就像 C# 一样……我在 C# 中从来不喜欢它,但这无关紧要)。因此,通过自动装箱,我希望上面将 myInt 转换为 Integer,然后对其调用 toString()。

此外,我相信 C# 允许这样的调用,除非我记错了。这只是 Java 自动装箱/拆箱规范的一个不幸缺陷,还是有充分的理由?

最佳答案

Java 自动装箱/拆箱并没有达到允许您取消引用原语的程度,因此您的编译器会阻止它。你的编译器仍然知道 myInt 作为一个原语。在 jcp.org 上有一篇关于此问题的论文.

自动装箱主要在赋值或参数传递期间有用——允许您将原语作为对象传递(反之亦然),或将原语分配给对象(反之亦然)。

所以不幸的是,你必须这样做:(感谢 Patrick,我改用你的方式)

Integer.toString(myInt);

关于java - 为什么 Java 自动装箱不扩展到自动装箱类型的方法的方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4242/

相关文章:

java - 自动装箱和重载

java - 异常后继续 SuperCSV 读取

java - 从头开始创建 LinkedList 类

java - 为什么这段代码中只发布了第一个元素?

java - 使用PreparedStatement::setInt null 输入会发生什么

java - 用户空间自动装箱?

java - 如何查找 Java 内存泄漏

java - 它正在尝试以 DOMAIN/COMPUTERNAME 而不是 DOMAIN/USERNAME 的身份连接

java - 比较器如何工作?

scala - 编译器错误? java.lang.ClassCastException : scala. collection.mutable.WrappedArray$ofRef 无法转换为 java.lang.Integer