【发布时间】:2016-09-10 06:23:55
【问题描述】:
int[] arr = {1, 2, 3};
arr = {1, 2, 3} //Error
arr = new int[] {1, 2, 3}; //No Error
所以我的问题是,为什么会这样?我的意思是第 2 行和第 3 行的区别在哪里?
【问题讨论】:
-
Java 语言就是这样指定的。无论您是否认为该语言可以或应该支持错误的语法,它根本不支持。
-
并非所有 Java 语言之父的想法都 100% 有意义。例如,我什至想不出为什么这些规则会使解析更容易。
-
这是 java 还是 C#?请不要同时标记问题
-
java 和 c# 是不同的语言。只用一种语言标记您的问题。
-
@GhostCat 我认为这是因为数组的协方差:因为您可以将
String[]分配给Object[],所以您不一定能推断出要创建的数组的元素类型RHS 上的元素和分配的 LHS 的元素类型。但这是针对引用类型的;看起来你可以使用原语。