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

2022-08-31 19:48:32

我想将基元转换为字符串,我尝试了:

myInt.toString();

此操作失败,并显示错误:

int cannot be dereferenced

现在,我得到基元不是引用类型(即,不是对象),因此不能有方法。但是,Java 5引入了自动装箱和取消装箱(a la C#...我从来都不喜欢C#,但这不是重点)。因此,使用自动装箱,我希望上述内容将myInt转换为整数,然后调用String()。

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


答案 1

Java 自动装箱/取消装箱不会达到允许您取消引用基元的程度,因此您的编译器会阻止它。您的编译器仍然知道是基元。jcp.org 有一篇关于这个问题的论文。myInt

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

所以不幸的是,你必须这样做:(感谢帕特里克,我切换到了你的方式)

Integer.toString(myInt);

答案 2

同上,贾斯汀说了什么,但你应该这样做:

Integer.toString(myInt);

它保存一两个分配,并且更具可读性。


推荐