Java:数组初始化的速记不能分配给对象

时间:2017-04-02 06:55:20

标签: java arrays initialization

Integer i1 = 1;
Integer i2 = 2;

Number arr1[] = {i1, i2};

我们已经知道,{i1,i2}是新号码[] {i1,i2}

的简写

但是以这种方式宣布:

Object o = {i1, i2};   //error

我收到了编译错误: 类型不匹配:无法从Integer []转换为Object

另一方面,

Object arr1 = new Number[]{i1, i2};

这不意味着,数组可以转换为Object。

如果我这样写:

Number arr2[] = {i1, i2};
Object obj = arr2;

也没关系。

所以,我想咨询的问题是,为什么我得到了编译错误。 或者日食给了我一个错误错误消息 ,对于'Object o = {i1,i2};''中的'{i1,i2}'不是数组?

2 个答案:

答案 0 :(得分:4)

速记数组初始值设定项仅在初始化数组时有效。 Number arr1[] = {i1, i2};声明并初始化Number数组Object o只声明一个对象,而不是数组。你可以写Object o = new Number[] { i1, i2 };(例如,不是速记),它会起作用。

答案 1 :(得分:2)

{..}是用于声明数组类型并初始化它的语法糖。

在你的Object o = {i1, i2}中,你没有指定它是一个数组类型(因为你省略了[]),所以编译器甚至不知道它是一个数组,即它对待它是单个对象并抛出错误。

Object o = {i1, i2}; // This is NOT an array type

Object[] o = {i1, i2}; //This represents an array

但是,一旦你创建了一个数组对象(即,使用new运算符指定大小或使用上面的语法糖),你将有一个数组对象您可以将其分配到Object类型,如下所示:

Number arr1[] = {i1, i2};//arr1 created & initialized
Object obj1 = arr1;//arr1 can now be assigned to Object type

Number arr2[] = new Number[2];//arr2 created (initialized values to null)
Object obj2 = arr2;//arr2 can now be assigned to Object type