StringBuffer型オブジェクトを生成するために、StringBufferクラスには次の3種類のコンストラクタが用意されている。
例:
StringBuffer strbuf1 = new StringBuffer(); StringBuffer strbuf2 = new StringBuffer(64); StringBuffer strbuf3 = new StringBuffer("ABCDE");
StringBufferオブジェクトは次の2つのタイプのサイズを持っている。
例:
実行結果は次の通り。
現在格納されている文字列サイズ : 5 バッファ容量 : 21
バッファ容量のデフォルトは通常16文字なので、"ABCDE"の5文字を足した結果の21文字が表示されている。全角文字"あ"でも半角文字"A"でも、文字列サイズは1となるので注意。
Stringクラスで設定した文字列を変更することはできない。一方、StringBufferクラスで設定した文字列を変更することができる。この事実は各々に用意されているメソッドから明白である。
例1:Stringクラス
String str1 = "test", str2; str2 = str1.concat("xxx"); //str2は"testxxx" str2 = str1.toUpperCase(); //str2は"TEST"
Stringクラスでは文字列を加工して、新しいString型変数str2に設定している。よって、str1の内容は変化しない。 もう少し厳密に言うと、メモリはstr1オブジェクト用に"test"という文字列をどこかの領域に確保する。そして、str1オブジェクトは"test"という文字列の先頭アドレスを指している。toUpperCaseメソッドが実行されると、str1が指している内容をコピーして、それを大文字化し、"TEST"は別のメモリ領域に記憶される。3行目でstr2オブジェクトは、その新たに生成された"TEST"の先頭アドレスを指す(文字列実体が渡されるわけではない)。最後にどこからも参照されていない"test"は不要と判断され、ガベージコレクタによって自動的に解放される。
例2:StringBufferクラス
StringBuffer str1 = new StringBuffer("yyy"); str1.append("zzz"); //str1は"yyyzzz" str1.setCharAt(2, '0'); //str1は"yy0zzz"
StringBufferクラスのオブジェクトstr1は直接内容書き換わっている。
newするときに引数に渡せばよい。
例:
char char_array[] = {'a', 'b', 'c', 'd', 'e'}; String str1; str1 = new String(char_array); //str1は"abcde" str1 = String.copyValueOf(char_array); //str1は"abcde" str1 = new String(char_array, 0, 3); //str1は"abc"(char_array[0]から3文字を設定) byte byte_array[] = {'A', 'B', 'C', 'D', 'E'}; String str2; str2 = new String(byte_array); //str2は"ABCDE" str2 = new String(byte_array, 0, 3); //str2は"ABC"(byte_array[0]から3文字を設定)
String型からchar配列への文字列取り出しには、StringクラスのgetCharsメソッドやtoCharArrayメソッドを使えばよい。また、String型からbyte配列への文字列取り出しには、StringクラスのgetBytesメソッドを使えばよい。
例:
char char_array[]; str.getChars(0, str.length(), char_array, 0); //String型strからchar[]へ char_array = str.toCharArray(); //String型strからchar[]へ byte byte_array[]; byte_array = str.getBytes(); //String型strからbyte[]へ
String str = "abcde"; StringBuffer strbuf; strbuf = new StringBuffer(str); //方法1 //方法2 strbuf.setLength(0); //内容をクリア strbuf.append(str); //文字列追加。 //方法3 strbuf.setLength(0); //内容をクリア strbuf.insert(0, str); //先頭に文字列挿入。
StringBuffer strbuf = "ABCDE"; String str; str = strbuf.toString(); //方法1 str = "" + strbuf; //方法2