我发现非常有趣但非常奇怪的字符串和数组混合(语法)。见下面的代码:
示例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)。有人可以介入,以帮助我理解如何处理和执行顶级语法。提前谢谢。
答案 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。你必须在括号内放一个int
。 x
是int
。
因此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
元素。请注意,如果随机数超出数组的范围,则程序将失败。