2013-02-20 67 views
0
String对象的数组

可以创建为阵基元或对象初始化

//合格声明和初始化

line 1: String[]s = new String[2]; 
line 2: String[]s = new String[]{"a","b"}; 

//下面的init也对我来说很好,但是编译器错误出

line 3: String[] s = new String[2] { "a", "b" }; 

1)为什么不能指定数组的大小第3行
2)当我使用第3行创建一个数组时,在堆或字符串池中创建了字符串“a”和“b”吗?

回答

6
  1. 你不能同时初始化一个数组并指定它的大小,这只是多余的。

  2. 所有字符串文字都存储在常量池中,并且在类加载时您的代码运行之前发生。

还要注意的是,即使new String[]是多余的一个初始化:

String[] s = {"a","b"}; 
+0

那应该是程序员的选择吗?就像在Java 7中允许钻石运算符声明和定期声明(java 6样式) – 2013-02-20 19:42:25

+1

不仅会是多余的,而且编译器也必须检查像'String [] s = new String [2] {“a “,”b“,”c“};' – jlordo 2013-02-20 19:43:20

+1

@jlordo所有冗余都会导致错误:) – 2013-02-20 19:43:43

0

这样做是为了防止歧义完成。

如果[]中的数字和您传递的对象的实际数量不匹配,系统应该做什么?

因此,数组的大小由传递给初始值设定项的对象数决定。


第二个问题有点不正确。 总是在堆上创建Java对象。

你的情况中的String对象取自String对象池,因为你使用文字,编译器可以很容易地实现它们在运行时的值。