0

字符串对象数组可以创建为

// 可接受的声明和初始化

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”是在堆上还是在字符串池中创建的?

4

2 回答 2

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

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

另请注意,new String[]使用初始化程序甚至是多余的:

String[] s = {"a","b"};
于 2013-02-20T19:40:20.903 回答
0

这样做是为了防止歧义。

如果 [] 中的数字与您传递的实际对象数量不匹配,系统该怎么办?

因此,数组的大小由传递给初始化程序的对象数定义。


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

您的情况下的 String 对象取自 String 对象池,因为您使用文字,编译器可以轻松地在运行时实现它们的值。

于 2013-02-20T19:50:00.997 回答