我遇到了这个Java问题:
以下哪个声明为假:
a. Object[] myarr1 = new String[3];
b. Object myarr2 = new String[3];
c. String[] myarr3 = new String[3];
d. String myarr3[] = new String[3];
我认为似乎b是答案。但是,在我在Eclipse中检查时,b中的声明实际上是正确的!
此外,我尝试了以下方法:
A. Object[] myarr1 = new String[]{"a1","b1","c1"};
B. Object myarr2 = new String[]{"a2","b2","c2"};
C. String[] myarr3 = new String[]{"a3","b3","c3"};
并打印出每个数组的内容,以通过将Object分配给String数组来研究其实际含义。
System.out.println(myarr1[0]); //print "a1"
System.out.println(myarr2[0]); //error
System.out.println(myarr3[0]); //print "a3"
System.out.println(myarr1); //print address of myarr1
System.out.println(myarr2); //print address of myarr2
System.out.println(myarr3); //print address of myarr3
看起来myarr1和myarr3的行为类似于普通的String数组,而myarr2则不同。调试以查看myarr2的内容后发现,myarr2的内容和结构似乎与myarr1和myarr3相同。
有人可以向我解释这个意义吗?使用声明b或B时,我们在做什么。myarr2的结构是什么?如何访问它的元素或将其转换为String数组?我尝试了(String [])myarr2,但这是一个错误。
谢谢大家。
最佳答案
从Java 6开始,它们都进行了编译,因此都是正确的。
b。对象myarr2 =新的String [3];
这行得通,因为使用new
运算符创建的所有内容都是Java中的对象。您可以稍后将其强制转换回其真实类型,例如,这些将按预期工作:
Object myarr2 = new String[] { "first", "second" };
String[] real = (String[]) myarr2;
real[1] = "hello";
System.out.println(real[1]); // will output "hello"
System.out.println(((String[])myarr2)[1]); // will output "hello"
d。字符串myarr3 [] =新的String [3];
这是有效的,但不建议使用此文档:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html