223 votes

Quelle est la différence entre "text" et new String ("text") en Java?

Quelle est la différence entre ces deux lignes?

 String s = "text";


String s = new String("text");
 

217voto

polygenelubricants Points 136838

Ce dernier crée explicitement une nouvelle et referentially des cas distincts d'un String objet; le premier peut réutiliser une instance à partir de la chaîne de la piscine si l'on est disponible.

Vous très rarement de vouloir utiliser l' new String(anotherString) constructeur. À partir de l'API:

String(String original) : Initialise un nouvellement créée String objet de sorte qu'il représente la même séquence de caractères comme argument; en d'autres termes, la chaîne nouvellement créée est une copie de l'argument chaîne. À moins explicite d'une copie de l'original est nécessaire, l'utilisation de ce constructeur est inutile étant donné que les chaînes sont immuables.

Questions connexes


Ce référentiel distinction signifie

Examiner le fragment de code suivant:

    String s1 = "foobar";
    String s2 = "foobar";

    System.out.println(s1 == s2);      // true

    s2 = new String("foobar");
    System.out.println(s1 == s2);      // false
    System.out.println(s1.equals(s2)); // true

== sur les deux types de référence est une référence à l'identité de comparaison. Deux objets qui sont equals ne sont pas nécessairement ==. Il est généralement mal d'utiliser == sur les types de référence; la plupart du temps equals doivent être utilisés à la place.

Néanmoins, si pour quelque raison que ce soit, vous devez créer deux equals mais pas == chaîne de caractères, vous pouvez utiliser l' new String(anotherString) constructeur. Il faut dire, cependant, que c'est très particulière, et est rarement l'intention.

Références

Questions liées à la

141voto

Braj Points 28874

Chaque fois que vous appelez new en JAVA, il crée un objet dans le tas et, évidemment, il appelle également le constructeur.

Les littéraux de chaîne iront dans String Constant Pool .

Cela vous aidera peut-être à comprendre visuellement si vous vous en souvenez plus longtemps.

entrez la description de l'image ici

1voto

Shashank T Points 311

Un moyen simple de comprendre la différence est ci-dessous: -

 String s ="abc";
String s1= "abc";
String s2=new String("abc");

        if(s==s1){
            System.out.println("s==s1 is true");
        }else{
            System.out.println("s==s1 is false");
        }
        if(s==s2){
            System.out.println("s==s2 is true");
        }else{
            System.out.println("s==s2 is false");
        }
 

la sortie est

 s==s1 is true
s==s2 is false
 

Ainsi, new String () créera toujours une nouvelle instance.

1voto

b_erb Points 8869

Pensez "bla" d'être une usine magique comme Strings.createString("bla") (pseudo). L'usine est titulaire d'une piscine de toutes les chaînes encore créé de cette façon.

S'il est appelé, il vérifie si il y a déjà de la chaîne dans la piscine avec cette valeur. Si la valeur est true, il retourne cette chaîne de l'objet, et donc à des chaînes obtenues de cette manière sont en effet le même objet.

Si pas, il crée un nouvel objet string en interne, l'enregistre dans la piscine, puis la retourne. Ainsi, lors de la même chaîne de valeur est interrogée la prochaine fois, il retourne la même instance.

Création manuelle d' new String("") remplace ce comportement en contournant la chaîne littérale de la piscine. Si l'égalité doit toujours être vérifié à l'aide d' equals() qui compare la séquence de caractères à la place de l'objet de référence de l'égalité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X