以下是此代码:
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?
答案 0 :(得分:5)
从1.5开始,当上下文调用它时,Java编译器将自动 box 和 unbox 原语类型。 (也就是说,int
包含在Integer
对象中,反之亦然。)当在基元和对象变量之间分配时会发生这种情况。 (或者将基元转换为对象类型。)因此,例如,以下代码有效:
int i = 123;
Object o = i;
编译器为foreach循环发出的隐式赋值Object someInt = someArray[…]
也是如此。
someArray[0].toString()
不起作用的原因是你没有将someArray[0]
分配给对象类型的变量,或者做任何其他会告诉编译器自动装箱的东西 - 尝试调用方法原语简单地不被认为是应该发生的条件之一。