2010-05-11 4 views
12

Voici mon code de test:Lorsque je crée une nouvelle chaîne en Java, est-elle initialisée avec null ou avec ""?

String foo = new String(); 
System.out.println(foo); 

La sortie est vide et une nouvelle ligne est écrite. Depuis que je suis nouveau à Java, je ne sais pas s'il a fait une chaîne "", ou les nulls sont traités comme des lignes vides.

+2

Vous pouvez facilement trouver la réponse à cette question en faisant 'System.out.println (foo.equals ("")); 'et en le comparant à' System.out.println (foo == null); ' –

+2

... mais cela ne devrait pas être nécessaire. Pour toute classe, "new" vous donnera une référence à une nouvelle instance d'objet, donc elle ne pourra jamais retourner "null". – leonbloy

+0

qu'en est-il de l'utilisation d'un débogueur pour voir la valeur? – tster

Répondre

19

La chaîne est initialisée sans caractères, ou "" en interne.

public String() { 
    this.offset = 0; 
    this.count = 0; 
    this.value = new char[0]; 
} 

La source ci-dessus provient du code source Java. Comme l'autre affiche l'a fait remarquer, les références peuvent être nulles ou pointer vers un objet, si vous créez un objet String et obtenez une référence pour le pointer, cette référence ne sera pas nulle. "Null" est une valeur pour une variable, pas une valeur pour une chaîne.

+0

Merci pour l'aide frère. Où avez-vous trouvé ce code de constructeur String()? Je voudrais également faire des recherches sur les autres types de base en Java au lieu de poser 7 questions pour chaque type. –

+1

Si vous avez le JDK installé, il sera quelque part comme C: \ Program Files \ java \ jdk1.7.0 \ src.zip. Eclipse le trouve automatiquement donc tout ce que j'ai à faire est ctrl-click sur String :) –

+1

La documentation de String indique explicitement que String() crée une chaîne vide. http://java.sun.com/javase/6/docs/api/java/lang/package-summary.html et cliquez sur Chaîne. – DJClayworth

8

"foo" peut avoir une valeur nulle, mais une chaîne réelle ne peut pas. Ce que vous avez fait est de créer une nouvelle chaîne vide (comme le dit la documentation pour le constructeur) et l'assigner à foo.

4

new String() crée une chaîne de longueur zéro. Si vous avez simplement dit "String foo;" en tant que variable membre, il serait initialisé à null. Si vous dites "String foo;" En tant que variable de fonction, elle est indéfinie et donnera une erreur de compilation si vous essayez de l'utiliser sans affecter de valeur.

1

Une nouvelle ligne est imprimée car vous avez appelé la méthode println(), qui imprime une ligne après l'impression de l'argument que vous avez passé. new String() retournera "".

2

Il est initialisé avec "" (chaîne vide)

public class StringTest { 
    public static void main(String [] args) { 
     System.out.println("".equals(new String())); 
    } 
} 

impressions:

true 
Questions connexes