Sb est essentiellement un objet StringBuffer. Directement, sb+"" appelle sb.toString() pour le raccorder à "". De plus, StringBuffer est thread-safe. Pourquoi utiliser StringBuilder ou StringBuffer ? La raison en est que la classe String dans Jdk est de type final, mais pourquoi la version finale modifiée peut-elle exister sous la forme de String str = s + "" ;? Parce que dans jvm, chaque fois que + est exécuté, un objet String temporaire sera créé, puis le String str = a + b; est en fait String str = new String(a) + new String(b); De cette manière, s'il y a trop de chaînes à épisser, de nombreux objets String seront créés. Par conséquent, la surcharge de gc augmentera. Par conséquent, ces opérations fréquentes n'utilisent pas directement l'épissage de chaînes, mais utilisent StringBuilder ou StringBuffer replace.
Sb est essentiellement un objet StringBuffer. Directement, sb+"" appelle sb.toString() pour le raccorder à "". De plus, StringBuffer est thread-safe. Pourquoi utiliser StringBuilder ou StringBuffer ? La raison en est que la classe String dans Jdk est de type final, mais pourquoi la version finale modifiée peut-elle exister sous la forme de String str = s + "" ;? Parce que dans jvm, chaque fois que + est exécuté, un objet String temporaire sera créé, puis le String str = a + b; est en fait String str = new String(a) + new String(b); De cette manière, s'il y a trop de chaînes à épisser, de nombreux objets String seront créés. Par conséquent, la surcharge de gc augmentera. Par conséquent, ces opérations fréquentes n'utilisent pas directement l'épissage de chaînes, mais utilisent StringBuilder ou StringBuffer replace.