[Java本格入門]という本を読みながら勉強しているのですが、
p70のラッパークラスの説明でつまづいてしまったので質問させていただきます。
本には下記のような旨が書かれています
//-------------------------------------------------------------------------------------------------
「プリミティブ型からラッパークラス型への変換にはコンストラクタを利用する方法もありますが、
コンストラクタを使用した場合には必ず新たなオブジェクトが生成されるので、
-128から127までの範囲であれば事前に生成されたオブジェクトを利用できるvalueOfメソッド
を使うとメモリを余計に使用せずにすみます。」
Integer num01 = new Integer(10); //新たなオブジェクトを生成するので効率が悪い
Integer num01 = Integer.valueOf(10); //キャッシュされたオブジェクトを返す
//-------------------------------------------------------------------------------------------------
私は「インスタンスを作成している1行目ではInteger型の変数にIntegerクラスの大きさ分メモリを確保してしまうが、
2行目ではInteger型の変数に10がはいるだけのメモリの確保ですむからvalueOfしたほうが効率がよいのかな」とまず考えましたが
「でも左辺でInteger型で宣言した以上Integerクラスぶんのメモリは確保しているか・・・」とも思っています。
頭の中がこんがらがったまま書いたためわかりづらい質問かと思いますが、なぜnewするよりstaticなvalueOfメソッドを呼び出したほうがよいのか
また、私はどういう知識が足りてないからここで躓いたのかアドバイスよろしくお願いします
※追記
先ほど朝食をとった後に再度考えました。
参照型変数はメモリの番地?格納位置?を示しているという考え方から
newしてインスタンスを生成するとわざわざメモリ上に新しく場所をとり、その場所の番号を格納しますが
すでにキャッシュにある-128から128ならそのキャッシュの番号の情報を格納するだけでよいというのはどうでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/04 02:54