2017-07-24 7 views
-2
class replaceDemo { 
    public static void main(String args[]) { 
     StringBuffer sb = new StringBuffer("This is a test."); 

     sb.replace(5, 7, "was"); 
     System.out.println("After replace: " + sb); 
    } 
} 

méthode REPLACE() retourne un objet StringBuffer alors pourquoi cette ligne est pas comme ça:Pourquoi le stockage de l'objet StringBuffer renvoyé par la méthode replace() n'est pas requis?

sb = sb.replace(5, 7, "was"); 

Pourquoi stocker l'objet retourné par le remplacer() n'est pas nécessaire?

+0

https: // docs. oracle.com/javase/7/docs/api/java/lang/StringBuffer.html#replace(int,%20int,%20java.lang.String) – Kon

+0

Ce qui dans les JavaDocs suggère que vous devez affecter l'objet retourné à un variable? Qu'est-ce qui est confus? En train de lire? – Tom

+0

Cela permet de chaîner plusieurs appels –

Répondre

0

Ceci n'est pas nécessaire car replace() renvoie l'objet CURRENT et non une copie du nouvel objet.

Le comportement de la fonction est qu'elle fonctionne sur l'objet actuel et ne crée pas un nouvel objet.

Retours:

Cet objet.

Notez qu'il ne s'agit pas d'un nouvel objet ou d'une copie de l'objet mais de l'objet actuel une fois l'opération terminée.

https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html#replace(int,%20int,%20java.lang.String)

2

StringBuffer est mutable et la mutation est un effet secondaire du procédé replace.

D'autre part, StringBuffer a une API couramment qui permet de "Enchaînement d'appel":

String test = new StringBuffer().append("some").append(" odd string").replace(5,8,"even").toString(); 

qui est équivalent à:

StringBuffer stringBuffer = new StringBuffer(); 
stringBuffer.append("some"); 
stringBuffer.append(" odd string"); 
stringBuffer.replace(5, 8, "even"); 
String test = stringBuffer.toString(); 
+0

"chaînage de méthode", c'est le nom habituel (juste une info). – Tom

+0

@Tom "méthode de chaînage" est * sooo siècle dernier ... *; o) –

1

StringBuffer est utilisé pour représenter les caractères peut être modifié. L'opération de remplacement manipule les caractères stockés sous la forme char [] dans StringBuffer et renvoie uniquement l'instance en cours.

afin d'appeler sb = sb.replace (5, 7, "était") est similaire à appeler juste sb.replace (5, 7, "était")