文字列の処理

広告

基本データ型の値を変数に代入した時には変数そのものが値を格納する入れ物となっていました。また配列を変数に代入した時には入れ物は別の場所で用意され変数には入れ物の位置が格納されていました。(配列の参照型変数については「参照型の変数の考え方」を参照して下さい)。

クラスのオブジェクトを変数に代入する場合は、配列の場合と同じく参照型の変数となります。よってStringクラスのオブジェクトを作成して変数に代入した場合は、まず入れ物が別に用意されてStringクラスのオブジェクトが格納され、変数には入れ物の位置が格納されます。

文字列は一文字の場合もありますし長い文字列の場合もあります。文字の数によって必要な入れ物の大きさは変わってくるはずですがStringクラスの変数には入れ物の位置だけが格納されているので文字列が何文字であっても同じように扱うことができます。

String str1 = "abc";
String str2 = "おはようございます";

なおこの別に用意された入れ物は一度作成すると中身を変更することができません。次の例を見て下さい。

String str;
str = "abc";
str = "おはようございます";

この場合、まず"abc"という3つの文字が格納される入れ物が用意され、その入れ物の位置が変数に格納されます。そして次の文で"おはようございます"という9つの文字が格納される入れ物が別に用意され、その新しい入れ物の場所が変数に格納されます。

この時、最初に作成された"abc"の3文字を格納するための入れ物は誰にも使われなくなるため自動的に処分されます。

また「文字列の連結」でも記載したとおり、文字列と文字列は「+」演算子によって連結することができますが、この場合も文字列と文字列をつなげた新しい文字列を別の入れ物を用意して格納しています。

String str;
str = "abc";
str = str + "def";

この場合、変数には最初"abc"が格納された入れ物の位置が格納されていますが、次の文に文字列"abc"と別の文字列"def"が連結された新しい文字列"abcdef"が別に用意された入れ物に格納されます。そしてその入れ物の位置が改めて変数に格納されます。その為、最終的に変数に格納された入れ物の位置は、"abc"の位置でも"def"の位置でもありません。

プログラムを作成する上ではあまり意識しなくてもいいことではありますが、次のページで解説する文字列の比較といった場合には重要になってきます。

サンプル

では簡単な例で試しておきます。

JSample3_1.java

class JSample3_1{
  public static void main(String args[]){
    String str = "こんにちは。";
    str = str + "加藤さん。";

    System.out.println(str);
  }
}

コンパイル後に実行すると次のように表示されます。

p3-1

( Written by Tatsuo Ikura )