基元或对象初始化数组

时间:2013-02-20 19:39:07

标签: java string initialization

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”?

2 个答案:

答案 0 :(得分:6)

  1. 您不能同时初始化数组并指定其大小,这只是多余的。

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

  3. 另请注意,即使new String[]对初始化程序来说也是多余的:

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

答案 1 :(得分:0)

这样做是为了防止歧义。

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

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


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

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