Java:如何初始化String []?

hhh*_*hhh 192 java string initialization

错误

% javac  StringTest.java 
StringTest.java:4: variable errorSoon might not have been initialized
        errorSoon[0] = "Error, why?";
Run Code Online (Sandbox Code Playgroud)

public class StringTest {
        public static void main(String[] args) {
                String[] errorSoon;
                errorSoon[0] = "Error, why?";
        }
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*ney 311

您需要初始化 errorSoon,如错误消息所示,您只是声明它.

String[] errorSoon;                   // <--declared statement
String[] errorSoon = new String[100]; // <--initialized statement
Run Code Online (Sandbox Code Playgroud)

您需要初始化数组,以便开始设置索引之前String元素分配正确的内存存储.

如果你声明数组(就像你所做的那样)没有为String元素分配内存,只有一个引用句柄errorSoon,当你尝试在任何索引处初始化一个变量时会抛出一个错误.

作为旁注,您还可以String在大括号内初始化数组,{ }因此,

String[] errorSoon = {"Hello", "World"};
Run Code Online (Sandbox Code Playgroud)

这相当于

String[] errorSoon = new String[2];
errorSoon[0] = "Hello";
errorSoon[1] = "World";
Run Code Online (Sandbox Code Playgroud)

  • 您不能使用()以默认值实例化数组中的每个String,这是一个小问题.一个由5个空字符串组成的数组应为= new Array [5](""); 而不是= {"","","","",""}. (8认同)

Yau*_*hen 123

String[] args = new String[]{"firstarg", "secondarg", "thirdarg"};
Run Code Online (Sandbox Code Playgroud)

  • 可能不是OP问题标题的确切含义,但我试图将我的字符串传递给接受String []的参数,这是解决方案 (2认同)
  • 如果你已经初始化了你的数组,并且你想重新初始化它,你就不能去`args = {"new","array"};`你将不得不``args = new String [] {"new" ,"array"};` (2认同)

Tay*_*ese 25

String[] errorSoon = { "foo", "bar" };
Run Code Online (Sandbox Code Playgroud)

- 要么 -

String[] errorSoon = new String[2];
errorSoon[0] = "foo";
errorSoon[1] = "bar";
Run Code Online (Sandbox Code Playgroud)


i_a*_*ero 10

Java 8中,我们也可以使用流,例如

String[] strings = Stream.of("First", "Second", "Third").toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)

如果我们已经有一个strings(stringList)列表,那么我们可以收集到字符串数组中:

String[] strings = stringList.stream().toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)


Sye*_*bas 9

我相信你刚刚从C++迁移,在java中你必须初始化一个数据类型(除了原始类型和字符串不被认为是java中的原始类型),如果你不这样做就可以根据它们的规范使用它们它就像一个空的引用变量(很像C++上下文中的指针).

public class StringTest {
    public static void main(String[] args) {
        String[] errorSoon = new String[100];
        errorSoon[0] = "Error, why?";
        //another approach would be direct initialization
        String[] errorsoon = {"Error , why?"};   
    }
}
Run Code Online (Sandbox Code Playgroud)


tri*_*ons 8

String[] arr = {"foo", "bar"};
Run Code Online (Sandbox Code Playgroud)

如果将字符串数组传递给方法,请执行以下操作:

myFunc(arr);
Run Code Online (Sandbox Code Playgroud)

或者做:

myFunc(new String[] {"foo", "bar"});
Run Code Online (Sandbox Code Playgroud)


Aar*_*onM 7

String[] errorSoon = new String[n];
Run Code Online (Sandbox Code Playgroud)

n是需要保持多少个字符串.

您可以在声明中执行此操作,或者稍后在没有String []的情况下执行此操作,只要它在您尝试使用它们之前.