我想将原语转换为字符串,然后尝试:

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/

10-09 08:46