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}'不是数组?
答案 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