Java: cómo inicializar String[]?

3 minutos de lectura

Error

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

Código

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

  • Java 8: stackoverflow.com/a/47769801/1216775

    – akhil_mittal

    25 de noviembre de 2018 a las 14:40

  • Inicializar matriz en Java

    – Raúl Gupta

    16 mayo 2021 a las 13:37

avatar de usuario
antonio forloney

Necesitas inicializar errorSooncomo lo indica el mensaje de error, solo tiene declarado eso.

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

Debe inicializar la matriz para que pueda asignar el almacenamiento de memoria correcto para el String elementos antes de puede comenzar a configurar el índice.

Si usted solamente declarar la matriz (como lo hizo) no hay memoria asignada para el String elementos, pero sólo un identificador de referencia para errorSoony generará un error cuando intente inicializar una variable en cualquier índice.

Como nota al margen, también puede inicializar el String matriz dentro de llaves, { } como tal,

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

que es equivalente a

String[] errorSoon = new String[2];
errorSoon[0] = "Hello";
errorSoon[1] = "World";

  • Es una pena que no pueda usar () para instanciar cada String en su matriz con un valor predeterminado. Una matriz de 5 cadenas vacías debería ser = nueva matriz[5](“”); en lugar de = {“”,””,””,””,””}.

    – Pieter De Bié

    15 de abril de 2015 a las 11:19

  • Usa un bucle for.

    –Tom Burris

    27 de septiembre de 2016 a las 8:59

String[] args = new String[]{"firstarg", "secondarg", "thirdarg"};

  • Tal vez no sea exactamente lo que sugiere el título de la pregunta OP, pero estaba tratando de pasar mi cadena a un parámetro que acepta Cadena[] esta es la solución

    – kommradHomer

    31 de marzo de 2014 a las 13:09


  • ¿No puedes omitir el nuevo String por cierto? Cuerda[] salida = {“”,””,””}; parece funcionar en mi código.

    – Pieter De Bié

    15/04/2015 a las 11:20

  • Si ya ha inicializado su arreglo y desea reinicializarlo, no puede ir args = {"new","array"}; Tendras que args = new String[]{"new", "array"};

    – Darpan

    8 de mayo de 2015 a las 6:16


String[] errorSoon = { "foo", "bar" };

— o —

String[] errorSoon = new String[2];
errorSoon[0] = "foo";
errorSoon[1] = "bar";

En Java 8 también podemos hacer uso de flujos, por ejemplo

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

En caso de que ya tengamos una lista de cadenas (stringList) entonces podemos recopilar en una matriz de cadenas como:

String[] strings = stringList.stream().toArray(String[]::new);

avatar de usuario
Tayyab Kazmi

Creo que acaba de migrar de C ++, bueno, en Java debe inicializar un tipo de datos (aparte de los tipos primitivos y String no se considera un tipo primitivo en Java) para usarlos de acuerdo con sus especificaciones si no lo hace entonces es como una variable de referencia vacía (como un puntero en el contexto de 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?"};   
    }
}

avatar de usuario
trillones

String[] arr = {"foo", "bar"};

Si pasa una matriz de cadenas a un método, haga lo siguiente:

myFunc(arr);

o hacer:

myFunc(new String[] {"foo", "bar"});

avatar de usuario
Aliaksandr Belik

String[] errorSoon = new String[n];

Siendo n la cantidad de cuerdas que necesita contener.

Puede hacerlo en la declaración, o hacerlo sin la Cadena[] más adelante, siempre y cuando sea antes de intentar usarlos.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad