3
A
回答
8
的代码是一样的:
private String[][][] var;
所有这些形式是相同的:
private String[][][] var;
private String[][] var[];
private String[] var[][];
private String var[][][];
而且他们都意味着同样的:字符串的三维阵列。 String var[][][]
的语法看起来可能有些奇怪,但它就像是让C/C++程序员感觉自己适合在Java中一样(这就是通常在C/C++中声明数组类型的方式)。
在Java中,String[][][] var
语法是优选的,因为它清楚地表明了类型的var
是String[][][]
,在其它语法和其不同的变化的类型的信息之前和可变后分裂 - 尽管它是完全合法从编译器的角度来看,阅读起来很难。
即使怪异,所有这些方法声明是合法的,等价的:
String[][][] m() {return null;}
String[][] m() [] {return null;}
String[] m() [][] {return null;}
String m() [][][] {return null;}
1
奥斯卡的答案是相当不错的。如果一个人在英语阅读String[][] var[]
,一会说“变种是二维字符串数组的数组”,从而“变种是一个三维的String数组”
3
The Java Language Specification说
“括号在说明符允许作为点头下向C 和C的传统++。一般规则变量声明,但是,允许 括号出现在两者的类型和在说明符,从而使 局部变量声明”
在JLS 10.2。在我看来,“类型”中的方括号([]
)比声明变量更有意义。但为了证实C/C++的传统,它是按照JLS中的文本所述完成的。另一件事是,将方括号与类型和变量混合在一起会让读者/程序员感到困惑。
1
这是一个示例,它显示[]
位置有何不同。
String[] arr, arr2[];
的arr
是String
阵列而arr2
是String
数组的数组。
如果您想要在同一行上声明不同的数组,您可以看到它的优点。
而且在你的例子也有可能是另一个var2
在同一行中声明:
private String[][] var[], var2;
相关问题
- 1. 为什么允许私人入口?
- 2. 为什么java允许NPE
- 3. 为什么字符串Remove()方法允许char作为参数?
- 4. 为什么不允许锁定(<integer var>),但允许Monitor.Enter(<integer var>)?
- 5. 为什么允许以下字符串文字?
- 6. 为什么C++允许将整数分配给字符串?
- 7. 为什么printf不允许指定多个格式字符串?
- 8. 为什么PHP私有类var不是私有的?
- 9. 为什么GCC允许从私有嵌套类继承?
- 10. 为什么PHP不允许私有常量?
- 11. 为什么允许静态方法调用私有方法?
- 12. 为什么Windows允许创建私有堆?
- 13. 为什么有些浏览器允许“无效”字符实体?
- 14. 为什么Java不允许以
- 15. 为什么java允许这样做?
- 16. 为什么Java允许多关系?
- 17. 域中允许的字符是什么?
- 18. EF6 - 注释允许空字符串,但不允许为null
- 19. 为什么允许访问另一个对象的私有字段?
- 20. 为什么允许空的wchar_t文字?
- 21. 为什么许多字符
- 22. 为什么LabVIEW允许数字控制中的字符?
- 23. Java消除html字符串中的不允许字符
- 24. 为什么[-n $ var]在空字符串上为true?
- 25. 为什么jQuery不允许ascii字符在html中显示?
- 26. %为什么不允许
- 27. 在Bash中将分隔字符串解析为数组 - 为什么“$ var”与$ var不同,但$ var没有空格?
- 28. 为什么不将val或var变量标记为私有?
- 29. 为什么字符串存储在Java中的字符串池?
- 30. 什么是替换字符串中不允许的字符的最佳方法?
关于Java一件奇怪的事,但在变量名数组括号是允许的。出于某种原因,我只看到Oracle教程中提到它在一开始就工作,从来没有使用过它。我猜这个分裂使它成为一个3d数组? –