Quelle est la différence dans la conversion du tampon de chaîne en chaîne à l’aide de .toSsortingng (), Ssortingng.valueOf () et + “”

Quelle est la principale différence dans la conversion de SsortingngBuffer en Ssortingng dans les trois cas suivants:

Cas 1: Utilisation de toSsortingng ()

SsortingngBuffer sb = new SsortingngBuffer("Welcome"); Ssortingng st = sb.toSsortingng(); 

Cas 2: Utiliser + “”

 SsortingngBuffer sb = new SsortingngBuffer("Welcome"); Ssortingng st = sb + ""; 

Cas 3: Utilisation de Ssortingng.valueOf ()

 SsortingngBuffer sb = new SsortingngBuffer("Welcome"); Ssortingng st = Ssortingng.valueOf(sb); 

Quelle est la meilleure pratique à utiliser en termes de performances?

Ce

 SsortingngBuffer sb = new SsortingngBuffer("Welcome"); Ssortingng st = sb + ""; 

entraînera plus ou moins

 SsortingngBuffer sb = new SsortingngBuffer("Welcome"); SsortingngBuilder builder = new SsortingngBuilder(); builder.append((sb == null) ? "null" : sb.toSsortingng()); builder.append(""); Ssortingng st = builder.toSsortingng(); 

Si nous les compilons en deux méthodes en java

 private SsortingngBuffer sb = new SsortingngBuffer("Welcome"); public Ssortingng testToSsortingng() { return sb.toSsortingng(); } public Ssortingng testAppend() { return sb + ""; } 

puis utilisez javap -v , nous obtenons

 public java.lang.Ssortingng testToSsortingng(); descriptor: ()Ljava/lang/Ssortingng; flags: ACC_PUBLIC Code: stack=1, locals=1, args_size=1 0: aload_0 1: getfield #19 // Field sb:Ljava/lang/SsortingngBuffer; 4: invokevirtual #27 // Method java/lang/SsortingngBuffer.toSsortingng:()Ljava/lang/Ssortingng; 7: areturn LineNumberTable: line 10: 0 LocalVariableTable: Start Length Slot Name Signature 0 8 0 this Lcom/stackoverflow/Question; public java.lang.Ssortingng testAppend(); descriptor: ()Ljava/lang/Ssortingng; flags: ACC_PUBLIC Code: stack=2, locals=1, args_size=1 0: new #31 // class java/lang/SsortingngBuilder 3: dup 4: invokespecial #33 // Method java/lang/SsortingngBuilder."":()V 7: aload_0 8: getfield #19 // Field sb:Ljava/lang/SsortingngBuffer; 11: invokevirtual #34 // Method java/lang/SsortingngBuilder.append:(Ljava/lang/Object;)Ljava/lang/SsortingngBuilder; 14: invokevirtual #38 // Method java/lang/SsortingngBuilder.toSsortingng:()Ljava/lang/Ssortingng; 17: areturn LineNumberTable: line 14: 0 LocalVariableTable: Start Length Slot Name Signature 0 18 0 this Lcom/stackoverflow/Question; 

Ainsi, l’ajout semble être légèrement moins efficace, car il utilise un peu plus de stack et contient plus d’instructions.