当前位置: 首页 > 面试题库 >

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

梁兴文
2023-03-14
问题内容

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

myInt.toString();

失败并显示以下错误:

int cannot be dereferenced

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

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


问题答案:

Java自动装箱/拆箱的程度无法允许您取消引用原语,因此您的编译器会禁止它。您的编译器仍然知道myInt它是原始的。jcp.org上有一篇有关此问题的论文。

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

所以不幸的是,您必须这样做:(向Patrick致敬,我改行了)

Integer.toString(myInt);


 类似资料:
  • 问题内容: 为什么第二段代码更快? 问题答案: 自动装箱使用,内部将Integer对象缓存为小整数(默认情况下为-128至127,但是最大值可以使用“ java.lang.Integer.IntegerCache.high”属性进行配置-请参见Integer.valueOf的源代码) ,因此与直接调用不同。因为在调用之前可以快速检查整数值的大小,所以直接调用要快一些(尽管如果您有很多小整数,它会使

  • 任何Java程序员都知道,不能将int(或其他基元值)放入集合中。集合只能保存对象引用,因此您必须将基元值装箱到适当的包装类中(在int的情况下是整数)。当您将对象从集合中取出时,您将得到您放入的整数;如果您需要一个int,您必须使用intValue方法解压整数。所有这些打包和拆箱都是一种痛苦,会把你的代码弄得乱七八糟。自动装箱和拆箱功能使过程自动化,消除了痛苦和混乱。 是否有其他方法将基本类型转

  • 本文向大家介绍自动装箱和拆箱?相关面试题,主要包含被问及自动装箱和拆箱?时的应答技巧和注意事项,需要的朋友参考一下 自动装箱是Java 编译器在基本数据类型和对应的对象包装类型之间做的一个转化。 比如:把int转化成 Integer,double转化成 Double,等等。反之就是自动拆箱。 原始类型: boolean,char,byte,short,int,long,float,double 

  • 在版本中,Java引入了的概念。 那么为什么我在覆盖未实现的方法时出现编译时错误,为什么上面的测试方法的参数没有以匹配父测试方法签名?

  • 问题内容: 当我执行以下操作时, -包含一个元素,它是一个。 -不编译(错误:构造函数未定义) -包含7个元素,它们是对象 这是代码: 问题: 编译器为什么不自动将to 中的元素装箱并创建一个?这是什么原因呢?是我的愚蠢还是其他原因? 问题答案: 区别在于本身是,而是对对象的引用数组。 方法采用某种类型的变量参数,没有上限。该方法的擦除为。这意味着它将接受从扩展的任何类型的可变数量的参数。 由于不