2012-01-18 24 views
1

Javaには不変型があります。メソッドに不変のオブジェクトを渡した場合、そのメソッドで値が変更されていても、そのメソッドを呼び出した後は変更されません。私はすべてのプリミティブが不変であることを知っています。 Stringも変更できません。
私はJavaでその機能をチェックするための簡単なコードを書いており、プリミティブのラッパークラスも不変であるようです。誰もが不変の型をjavaでリストできますか?Javaのすべての不変型

+3

プリミティブは不変ではありません。 「メソッドに渡した後も変化しない」という事実は、値が渡されているためであり、不変ではないからです。 – amit

+0

類似した質問:http://stackoverflow.com/questions/5124012/examples-of-immutable-classes – Azodious

+0

このリストを知る理由は何ですか? – Dapeng

答えて

4

いくつか新しいものを導入かなり確信しています

は不変ではありません。

void change(SomeType st) { 
    st.setValue(123); 
} 

は実際のものに変更されます。 While

void change(SomeType st) { 
    st = new SomeType(123); 
} 

はありません。ここでの違いは、参照を変更しているのか、参照されているオブジェクトを操作しているのかにあります。

文字列とそのラッパークラスは、そのオブジェクトを変更する可能性があるsetValueのようなメンバー関数がまったくないため、不変と呼ばれます。

これをご理解いただきますようお願い申し上げます。疑問がある場合は、コメントして自由に尋ねることができます。

+0

私は理解しました、ありがとうございました。 – shift66

-1

jdkで提供されるプリミティブ値を保持する目的のクラスは、このリストを渡す必要があります。

例 - 整数、ロング、ダブル、ストリングなど。

+0

Javaでは、プリミティブ型は列挙可能です:byte、short、int、long、char、float、double、bool。プリミティブと不変の2つの全く異なるものです。 – Haozhun

+0

@Gene、あなたはこのステートメントを誤解しています。任意のクラスは、プリミティブな値の表現をthats ...私は今あなたはポイントを得ることを願っています。 –

+0

私はまだあなたの意見を得ていませんでした。私を許してください。しかし、ダウンドローはタイムアウトのためにロックされており、今は変更できません。ごめんなさい。 – Haozhun

1

いいえ、それは不可能です。

誰もが自分自身の不変のタイプを追加することができますし、私は、Javaの各異なるバージョンが、それの価値がその方法で変更された場合でも、そのメソッドを呼び出した後に変更されることはありません

+0

はい、Googleで検索しました。私はすべての既知の不変型を知りたい。たとえばIntegerです。誰もがこのタイプを使うことができます。 URIも不変であるようです。それはうんざりですか? – shift66

+0

@Ademiban:どこで終了するのですか?誰もがApacheコモンズを使うことができますが、そこにもimmutablesもリストされているはずですか?> – amit

+0

javadocにはすべての情報があります。 URIからのjavadoc:このクラスのインスタンスは不変です。だからはいURIは不変です – Peter

関連する問題