JavaA2Z

KAB-studio > プログラミング > JavaA2Z > インスタンスは不変とは

インスタンスは不変

日本語 実体不変
英語 instances are immutable
ふりがな いんすたんすはふへん
フリガナ インスタンスハフヘン

解説

インスタンスの作成後は、インスタンス内のフィールドを変更できないこと。
つまり、そのインスタンス定数ということになる。
 
Integerクラス等のラッパークラスや、StringクラスBigDecimalクラスFileクラスといったクラスインスタンスが該当する。つまりこれらのクラスの「インスタンスは不変」である。
たとえばIntegerクラスの場合、インスタンスを作成した後は、インスタンス内の整数値を変更することはできない。整数値を格納するフィールドprivateフィールドであり、フィールドを書き換えるメソッドが提供されていないからである。
そのため、Integerクラスインスタンス定数となる。これが「インスタンスは不変」という意味である。

これは他のラッパークラスや、StringクラスBigDecimalクラスFileクラスでも同様である。たとえばStringクラスであれば、インスタンスを作成後に、格納されている文字列を書き換えることはできない。
 
ただし、変更できないのはあくまで「インスタンス内の値」である。
参照変数が指すインスタンスを「取り替える」ことは可能なため、変更したければ新たにインスタンスを作成し参照を切り替えればよい。

また、Stringクラスに対してはStringBufferクラスという、インスタンス内の文字列を書き換えられるクラスが用意されている。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java

public class Sample
{
    public static void main( String[] args )
    {
        // Integerクラスのインスタンスは不変です。
        Integer i = new Integer( 100 );
        System.out.println( i );
        // 100

        // 今作られたインスタンス内には100が格納されて
        // いますが、この値を200に書き換えることは
        // できません。
        // 格納しているフィールドにアクセスできませんし、
        // 書き換えるメソッドもありません。

        // ただし、インスタンスを新たに作って、参照を
        // 上書きしてしまえば、実質的に「変更」できます。
        i = new Integer( 200 );
        System.out.println( i );
        // 200

        // 新たにインスタンスを作って200を格納し、それを
        // 参照させました。
        // 最初に作ったインスタンスは、まだ100を格納した
        // ままですが、参照型変数iを通して見た場合には、
        // 実質的に「200に変更できた」ことになります。
    }
}
// Sample.java

public class Sample
{
    public static void main( String[] args )
    {
        // Integerクラスのインスタンスは不変です。
        Integer i = new Integer( 100 );
        System.out.println( i );
        // 100

        // 今作られたインスタンス内には100が格納されて
        // いますが、この値を200に書き換えることは
        // できません。
        // 格納しているフィールドにアクセスできませんし、
        // 書き換えるメソッドもありません。

        // ただし、インスタンスを新たに作って、参照を
        // 上書きしてしまえば、実質的に「変更」できます。
        i = new Integer( 200 );
        System.out.println( i );
        // 200

        // 新たにインスタンスを作って200を格納し、それを
        // 参照させました。
        // 最初に作ったインスタンスは、まだ100を格納した
        // ままですが、参照型変数iを通して見た場合には、
        // 実質的に「200に変更できた」ことになります。
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2010/02/22
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。