【问题标题】:Array literal only usable for declaration? [duplicate]数组文字仅可用于声明? [复制]
【发布时间】: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 的元素类型。但这是针对引用类型的;看起来你可以使用原语。

标签: java c# arrays literals


【解决方案1】:

这就是 java 或 C# 的工作方式,哥们,真的不能抱怨。如果我们谈到编程语言语义,第 2 行引入了一些并不真正需要的歧义,如果我们考虑真正高级的东西,比如解析树需要为像第 2 行这样的语句构建,我们遇到了很大的麻烦。

如果你喜欢link to parse trees,请阅读一些关于解析器的内容

【讨论】:

    猜你喜欢
    • 2016-05-07
    • 2013-06-30
    • 2023-03-11
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多