从原始类型到Object的隐式转换

时间:2012-12-15 16:00:24

标签: java

以下是此代码:

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?

1 个答案:

答案 0 :(得分:5)

从1.5开始,当上下文调用它时,Java编译器将自动 box unbox 原语类型。 (也就是说,int包含在Integer对象中,反之亦然。)当在基元和对象变量之间分配时会发生这种情况。 (或者将基元转换为对象类型。)因此,例如,以下代码有效:

int i = 123;
Object o = i;

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

someArray[0].toString()不起作用的原因是你没有将someArray[0]分配给对象类型的变量,或者做任何其他会告诉编译器自动装箱的东西 - 尝试调用方法原语简单地不被认为是应该发生的条件之一。