Java Array声明混淆[重复]

Posted

技术标签:

【中文标题】Java Array声明混淆[重复]【英文标题】:Java Array declaration confusion [duplicate] 【发布时间】:2017-10-28 14:48:26 【问题描述】:

给定一个名为 ThisClass 的类,它只包含这个:

public static void main(String[][] args) 
    System.out.println(args[0][1]);

public static void main(String[] args) 
    ThisClass app = new ThisClass();
    String[][] newargs = args;
    app.main(newargs);

如果你编译它然后用java ThisClass a b c 运行它,它会打印: b

...所以它采用第一个数组并自动包装它以适应二维数组?这很奇怪。有人可以分解这里发生的事情吗?我很确定我错过了一些东西。

【问题讨论】:

在java中真的没有任何'2d'数组,只有数组的数组。没有自动包装,您获取了一个数组,然后使用数组文字语法将其放入另一个数组中。因此,您制作了一个数组数组。 【参考方案1】:

正在调用第二个 main 函数(以 String[] 作为参数的函数)。

在此函数中,您将 newArgs 创建为一个仅包含一个元素的二维数组,此元素为数组 a, b, c

因此,当您打印args[0][1] 时,您会打印数组a, b, c 的索引1 处的元素,即b

【讨论】:

【参考方案2】:

System.out.println(args[0][1]); 中,args[0]String[] 相同

public static void main(String[] args) 
    ThisClass app = new ThisClass();
    String[][] newargs = args;
    app.main(newargs);

因为newargs 包含一个元素String[] args。因此,您正在 printlng args[1] whichb

【讨论】:

以上是关于Java Array声明混淆[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Proguard 混淆导致 java.lang.IllegalArgumentException:类声明多个名为“a”的 JSON 字段

无法在 C++ 中声明动态二维数组 [重复]

Shell - 如何声明关联数组并遍历[重复]

PHP中此数组声明的差异[重复]

C++:混淆声明语义

powershell 能声明二维数组么