fonctionnement de StringBuffer
Bonjour,
il y a quelque-chose que je ne comprends pas dans la classe StringBuffer : si je vide un StringBuffer (en utilisant invariablement setLength(0) ou delete(0, sb.length())) à l'intérieur d'un bloc (entre deux accolades), il arrive qu'en sortant des accolades il y ait à nouveau quelque-chose dans le StringBuffer. C'est à dire par exemple :
Code:
1 2 3 4 5 6 7 8 9
| if (current != last){
indices[current - 1] = i - sb.length();
last = current;
sb.setLength(0);
System.out.println(sb);
System.out.println(sb.length());
}
System.out.println(sb);
System.out.println(sb.length()); |
Pour le premier affichage tout va bien et pour le second, sb vaut l'ancienne valeur avec l'ancienne taille. Je précise que parfois cela fonctionne bien (la taille reste à 0, etc.).
J'ai également essayé de faire ma propre classe MyStringBuffer en version simpliste :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| public class MyStringBuffer {
int size;
int pos = 0;
char[] buffer;
MyStringBuffer(int size){
this.size = size;
buffer = new char[size];
}
void append(char c){
buffer[pos] = c;
pos++;
}
int length(){
return pos;
}
void clear(){
pos = 0;
}
public String toString(){
return new String(buffer, 0, pos);
}
} |
et le même phénomène se produit. Comment se fait-ce ?