Javaに関する様々な情報をご紹介します。

2Stringの概要、コンストラクタ

Javaに関する様々な情報をご紹介します。

Stringの概要、コンストラクタ

Characterクラスが単一文字しか扱えなかったのに対しStringクラスは複数文字(文字列)を扱うことができます。ただし、Characterクラスと同様、一度文字列がオブジェクトに代入されるとその文字列を変更することができません。文字列を変更したい場合はStringBufferクラスを使用します。Stringクラスは異なるオブジェクト間で同一文字列の共有ができるなど効率のよいつくりとなっています。メモリの有効利用を考えると代入された文字列の変更がなければ、優先的にStringクラスを使用するようにします。

概要

Stringオブジェクトを生成する主な手段として以下の2つの方法があります。

String オブジェクト名 = ”文字列”;

String オブジェクト名 = new String(”文字列”);


new演算子を使用しない上段の方法は、new演算子を使用する下段の方法に比べメモリ使用の関係上効率がよいです。上段の方法はコンパイル時指定された文字列がメモリ領域内に作られるのに対し、下段の方法はコンパイル時指定された文字列がメモリ領域内に作られるのに加え、new String( )実行時にも同様な指定された文字列を含むインスタンスが作られます。これは余分なメモリ領域であり、Stringクラスに用意されている便利なコンストラクタを使用する場合を除き、new演算子を使用する必要はありません。

new演算子を使用しない場合

new演算子を使用しない場合

new演算子を使用する場合

new演算子を使用する場合

コンストラクタ

Stringクラスで用意されているコンストラクタの内、いくつかを紹介します。状況に応じコンストラクタの使い分けを行います。コンストラクタの詳細はコンストラクタページを参照してください。

コンストラクタ 説明
String( ) 空のオブジェクトを生成します。
String(byte[ ])
String(byte[ ], int, int)
String(byte[ ], int, int, String)
String(byte[ ], String)
バイト配列から生成される文字列をオブジェクトに代入します。int型の値(存在する場合)はバイト配列におけるオフセットと長さを表します。String型の値(存在する場合)はバイトを文字列に変換する際に使用する文字エンコーディング方法を指定します。
String(char[ ])
String(char[ ], int, int)
char型配列から生成される文字列をオブジェクトに代入します。int型の値(存在する場合)はchar型配列におけるオフセットと長さを表します。
String(String) 別のString型オブジェクトの値を代入して、新規String型オブジェクトを生成します。
String(StringBuffer) StringBuffer型オブジェクトの値を代入して、新規String型オブジェクトを生成します。

【例1】バイト配列から文字エンコーディング方法を指定してStringオブジェクトを生成する方法です。

import java.io.*;

public class ExString {
    public static void main(String[] args) {
        ExString ccc = new ExString();
        //メソッドprintStringの呼び出し
        ccc.printString("これはByte配列です。");
    }

    void printString (String bbb) {
        try {
            //エンコード形式を指定して、Stringオブジェクトaaaの生成
            String aaa = new String(bbb.getBytes("EUC_JP"), "EUC_JP");
            System.out.println(aaa);
        } catch (UnsupportedEncodingException e) {
            System.err.println(e.getMessage());
        }
    }
}

解説1

クラスExStringのオブジェクトcccを生成し、printStringメソッドの呼び出しを行っています。メソッドの呼び出しの際、生成したいStringオブジェクトの文字列(「これはByte配列です。」)を引数に指定しています。printStringメソッドではStringコンストラクタによりStringオブジェクトaaaの生成を行っています。第1引数にはbyte配列を指定します。

getBytesメソッドにより文字列をbyte配列に変換しています。第2引数にはエンコードしたい形式を指定します。生成された Stringオブジェクトaaaをprintlnメソッドにより表示しています。Javaでサポートされているエンコード形式はこちらを参照してください。本プログラムではJava構成要素のうち例外(try、catch)をというものを使用しています。例外についての詳細は例外ページを参照してください。

実行結果1

D:\JAVA>javac ExString.java

D:\JAVA>java ExString
これはByte配列です。

D:\JAVA>

【例2】char型配列からStringオブジェクトを生成する方法です。

public class ExString2 {
    public static void main(String[] args) {
        char[] ccc = {'a', 'b', 'c', 'd', 'e'};
        //char型配列のうちbcdをを文字列として
        //Stringオブジェクトaaaに代入
        String aaa = new String(ccc, 1, 3);
        System.out.println("Stringオブジェクトaaaは"
            + aaa + "です。");
    }
}

解説2

引数にchar型配列をとるコンストラクタを使用してchar型配列の値「a」、「b」、「c」、「d」、「e」の内、「b」、「c」、「d」をStringオブジェクトに代入するプログラムです。printlnメソッドでbcdが表示されるとStringオブジェクトaaaの生成は成功です。

実行結果2

D:\JAVA>javac ExString2.java

D:\JAVA>java ExString2
Stringオブジェクトaaaはbcdです。

D:\JAVA>

2Stringの概要、コンストラクタ