Java: comment initialiser String []?

201

Erreur

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

Code

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

Réponses:

332

Vous devez initialiser errorSoon , comme indiqué par le message d'erreur, vous venez de le déclarer .

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

Vous devez initialiser le tableau afin qu'il puisse allouer le stockage de mémoire correct pour les Stringéléments avant de pouvoir commencer à définir l'index.

Si seulement vous déclarez le tableau (comme vous l'avez fait), il n'y a pas de mémoire allouée aux Stringéléments, mais uniquement un descripteur de référence à errorSoon, et générera une erreur lorsque vous essayez d'initialiser une variable à n'importe quel index.

En remarque, vous pouvez également initialiser le Stringtableau à l'intérieur des accolades, { }comme tel,

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

ce qui équivaut à

String[] errorSoon = new String[2];
errorSoon[0] = "Hello";
errorSoon[1] = "World";
Anthony Forloney
la source
8
C'est dommage que vous ne puissiez pas utiliser () pour instancier chaque chaîne de votre tableau avec une valeur par défaut. Un tableau de 5 chaînes vides doit être = new Array [5] (""); au lieu de = {"", "", "", "", ""}.
Pieter De Bie
Utilisez une boucle for.
Tom Burris
128
String[] args = new String[]{"firstarg", "secondarg", "thirdarg"};
Yauhen
la source
3
Peut-être pas exactement ce que le titre de la question OP suggère, mais j'essayais de passer ma chaîne à un paramètre qui accepte String [], c'est la solution
kommradHomer
Vous ne pouvez pas oublier le nouveau String btw? String [] output = {"", "", ""}; semble fonctionner dans mon code.
Pieter De Bie
2
Si vous avez déjà initialisé votre baie et que vous souhaitez la réinitialiser, vous ne pouvez pas y aller. args = {"new","array"};Vous devrez args = new String[]{"new", "array"};
Darpan
26
String[] errorSoon = { "foo", "bar" };

-- ou --

String[] errorSoon = new String[2];
errorSoon[0] = "foo";
errorSoon[1] = "bar";
Taylor Leese
la source
9

Je crois que vous venez de migrer de C ++, Eh bien en java, vous devez initialiser un type de données (autres que les types primitifs et String n'est pas considéré comme un type primitif en java) pour les utiliser selon leurs spécifications si vous ne le faites pas alors c'est comme une variable de référence vide (un peu comme un pointeur dans le contexte 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?"};   
    }
}
Syed Tayyab Abbas
la source
9

Dans Java 8, nous pouvons également utiliser des flux, par exemple

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

Dans le cas où nous avons déjà une liste de chaînes ( stringList), nous pouvons collecter dans un tableau de chaînes comme:

String[] strings = stringList.stream().toArray(String[]::new);
akhil_mittal
la source
7
String[] errorSoon = new String[n];

Avec n étant le nombre de chaînes qu'il doit contenir.

Vous pouvez le faire dans la déclaration, ou le faire sans String [] plus tard, tant que c'est avant d'essayer de les utiliser.

AaronM
la source
2
String[] arr = {"foo", "bar"};

Si vous passez un tableau de chaînes à une méthode, procédez comme suit:

myFunc(arr);

ou faites:

myFunc(new String[] {"foo", "bar"});
trillions
la source
1

Vous pouvez toujours l'écrire comme ça

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.  
}
Gopolang
la source
0

Déclaration de chaîne:

String str;

Initialisation de chaîne

String[] str=new String[3];//if we give string[2] will get Exception insted
str[0]="Tej";
str[1]="Good";
str[2]="Girl";

String str="SSN"; 

Nous pouvons obtenir un caractère individuel dans String:

char chr=str.charAt(0);`//output will be S`

Si je veux obtenir une valeur Ascii de caractère individuel comme ceci:

System.out.println((int)chr); //output:83

Maintenant, je veux convertir la valeur Ascii en caractère / symbole.

int n=(int)chr;
System.out.println((char)n);//output:S
Shiva Nandam Sirmarigari
la source
0
String[] string=new String[60];
System.out.println(string.length);

c'est l'initialisation et obtenir le code STRING LENGTH de manière très simple pour les débutants

Asfer Hussain Siddiqui
la source
0

Vous pouvez utiliser le code ci-dessous pour initialiser la taille et définir une valeur vide sur un tableau de chaînes

String[] row = new String[size];
Arrays.fill(row, "");
Ali Sadeghi
la source