Java: как инициализировать String []? - PullRequest
184 голосов
/ 02 апреля 2010

Error

% javac  StringTest.java 
StringTest.java:4: variable errorSoon might not have been initialized
        errorSoon[0] = "Error, why?";

Код

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

Ответы [ 11 ]

300 голосов
/ 02 апреля 2010

Вам необходимо инициализировать errorSoon, как указано в сообщении об ошибке, у вас есть только объявлено это.

String[] errorSoon;                   // <--declared statement
String[] errorSoon = new String[100]; // <--initialized statement

Вам нужно инициализировать массив, чтобы он мог выделить правильное хранилище для элементов String до , после чего вы можете начать установку индекса.

Если вы только объявите массив (как вы это сделали), то для элементов String не будет выделена память, а только дескриптор ссылки на errorSoon, и при попытке вы получите инициализировать переменную по любому индексу.

В качестве примечания можно также инициализировать массив String внутри фигурных скобок, { } как таковой,

String[] errorSoon = {"Hello", "World"};

, что эквивалентно

String[] errorSoon = new String[2];
errorSoon[0] = "Hello";
errorSoon[1] = "World";
119 голосов
/ 08 января 2014
String[] args = new String[]{"firstarg", "secondarg", "thirdarg"};
25 голосов
/ 02 апреля 2010
String[] errorSoon = { "foo", "bar" };

- или -

String[] errorSoon = new String[2];
errorSoon[0] = "foo";
errorSoon[1] = "bar";
9 голосов
/ 12 февраля 2015

Я полагаю, что вы только что перешли с C ++. Что ж, в Java вы должны инициализировать тип данных (кроме примитивных типов, а String не считается примитивным типом в 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?"};   
    }
}
8 голосов
/ 12 декабря 2017

В Java 8 мы также можем использовать потоки, например,

String[] strings = Stream.of("First", "Second", "Third").toArray(String[]::new);

Если у нас уже есть список строк (stringList), мы можем собрать его в массив строккак:

String[] strings = stringList.stream().toArray(String[]::new);
7 голосов
/ 02 апреля 2010
String[] errorSoon = new String[n];

Если n, сколько строк нужно хранить.

Вы можете сделать это в объявлении или позже без String [], если только вы не попытались их использовать.

1 голос
/ 12 февраля 2015

Вы всегда можете написать это так

String[] errorSoon = {"Hello","World"};

For (int x=0;x<errorSoon.length;x++) // in this way u create a for     loop that would like display the elements which are inside the array     errorSoon.oh errorSoon.length is the same as errorSoon<2 

{
   System.out.println(" "+errorSoon[x]); // this will output those two     words, at the top hello and world at the bottom of hello.  
}
0 голосов
/ 14 мая 2019
String[] arr = {"foo", "bar"};

Если вы передаете строковый массив методу, выполните:

myFunc(arr);

или сделайте:

myFunc(new String[] {"foo", "bar"});
0 голосов
/ 10 ноября 2018

Вы можете использовать приведенный ниже код для инициализации размера и установки пустого значения в массив строк

String[] row = new String[size];
Arrays.fill(row, "");
0 голосов
/ 05 июля 2017
String[] string=new String[60];
System.out.println(string.length);

это инициализация и получение кода STRING LENGTH очень простым для начинающих

...