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”?
答案 0 :(得分:6)
您不能同时初始化数组并指定其大小,这只是多余的。
所有字符串文字都存储在常量池中,并且在代码运行之前,在类加载时发生。
另请注意,即使new String[]
对初始化程序来说也是多余的:
String[] s = {"a","b"};
答案 1 :(得分:0)
这样做是为了防止歧义。
如果[]中的数字与您传递的实际对象数不匹配,系统应该怎么做?
因此,数组的大小由传递给初始值设定项的对象数定义。
第二个问题有点不正确。 始终在堆上创建Java对象。
你的案例中的String对象来自String对象池,因为你使用文字和编译器可以很容易地实现它们在运行时的值。