4

这是这段代码:

int[] someArray = {0, 1, 2, 3};
//System.out.println(someArray[0].toString()); int cannot be dereferenced
// creating Object element with use of primitive element fails
//Object newObject = new Object(someArray[0]); constructor Object in class java.lang.Object cannot be applied to given types;
for(Object someObject : someArray)
{
    // here int is casted to Object
    System.out.println(someObject.toString()); // prints 0, 1, 2, 3
}

原始类型变量(数组的元素)不能显式转换为 Object 是如何发生的,但是在 for 循环中,这个原始元素以某种方式转换为 Object?

4

1 回答 1

7

从 1.5 开始,Java 编译器会在上下文调用时自动对原始类型进行装箱拆箱。(也就是说,anint被包裹在一个Integer对象中,反之亦然。)这发生在原语和对象变量之间进行赋值时。(或将原语转换为对象类型。)例如,以下代码是有效的:

int i = 123;
Object o = i;

Object someInt = someArray[…]编译器为 foreach 循环发出的隐式赋值也是如此。

someArray[0].toString()不起作用的原因是您没有分配someArray[0]给对象类型的变量或做任何其他会告诉编译器自动装箱的事情 - 尝试在原语上调用方法根本不被识别为条件之一这应该发生。

于 2012-12-15T16:25:05.717 回答