字符串和数组混合语法和非常罕见的用法

时间:2014-02-14 14:53:57

标签: java arrays string

我发现非常有趣但非常奇怪的字符串和数组混合(语法)。见下面的代码:

示例A:

int x = (int)(Math.random()*4 );
String n = new String[] {"FF", "RR"}[x];

System.out.println(n) ;

当随机数为0或1时输出“FF”或“RR”。我的问题是如何发生这种情况。我无法理解示例A中使用的语法。我使用了非常普通的String数组语法,如下所示:

String s[] ;
s = new String[]{"dd", "rr"};

String s [] =  {"gg", "ss"};

但我还没有看到顶级语法(例A)。有人可以介入,以帮助我理解如何处理和执行顶级语法。提前谢谢。

4 个答案:

答案 0 :(得分:4)

String n = new String[] {"FF", "RR"}[x];
           ^^^^^^^^^^^^^^^^^^^^^^^^^

这将创建一个匿名数组,其中包含两个元素"FF""RR"。匿名数组是一个没有名称的临时对象,一旦语句执行完毕就会被销毁。然后使用[]运算符索引该匿名数组。

String n = new String[] {"FF", "RR"}[x];
                                    ^^^

这将返回匿名数组的x'元素。

请注意,此计划中似乎存在错误;如果随机数导致x大于1,您将获得ArrayIndexOutOfBoundsException

答案 1 :(得分:1)

new String[] {"FF", "RR"}是“String of array”类型的表达式。这就是您可以将其分配到<{p>中的s的原因

String[] s = new String[] {"FF", "RR"};

由于它是“字符串数组”类型,您可以使用它上面的[]运算符来获取给定索引处的String。你必须在括号内放一个intxint

因此new String[] {"FF", "RR"}[x]是数组x的索引new String[] {"FF", "RR"}处的元素。此元素的类型为String。因此,您可以将其分配给变量n,该变量也被声明为String。

这与做

基本相同
char c = "hello".charAt(2);

int i = new Person().getName().substring(2).indexOf('o');

答案 2 :(得分:0)

它与你的第二种符号基本相同。

第二行相当于

String s[]= new String[]{"FF","RR"};
String n = s[x];

这只是s在这个例子中是匿名的。

答案 3 :(得分:0)

这是这样的:当你正常访问String数组中的元素时,你会怎么做?

String s = arr[0];

获取数组中的第一个元素。现在你这样做:

String n = new String[] {"FF", "RR"}[x];

您只是在创建时立即从数组中获取元素。或者,xth元素。请注意,如果随机数超出数组的范围,则程序将失败。