この回答に従ってここ
Java オブジェクトとプリミティブの両方がヒープに入ります。では、JVM の観点からすると、オブジェクトとプリミティブは似ていますが、オブジェクトはヒープ上でより多くのスペースを必要としますか? 本質的に、プリミティブは「軽い」オブジェクトに他なりませんか?
この回答に従ってここ
Java オブジェクトとプリミティブの両方がヒープに入ります。では、JVM の観点からすると、オブジェクトとプリミティブは似ていますが、オブジェクトはヒープ上でより多くのスペースを必要としますか? 本質的に、プリミティブは「軽い」オブジェクトに他なりませんか?
Java プリミティブは「軽いオブジェクト」ではありません。それらはプリミティブです。Collection
これらは、オブジェクトに入ることができないことと、メソッドを持たないことの 2 つの非常に重要な点で、オブジェクトとして失敗します。
また、実際の Java オブジェクトのフィールドを除いて、ヒープにも移動しません。できませんnew int
。プリミティブ型のローカル変数を宣言すると、その変数が存在することにも注意してください。オブジェクト型のローカル変数を宣言すると、オブジェクトへの参照だけが得られますがnull
、変数を宣言するだけでは、宣言された型のオブジェクトは割り当てられず、割り当てられません。
オートボクシングは区別を多少あいまいにすることに注意してください。ただし、区別は確実にあります。
ここには少し混乱があります。質問でリンクしている質問は、オブジェクト内のプリミティブがヒープにある可能性があることを示しています。プリミティブは、単独でヒープに入れることはできません。
オブジェクトのように参照することはできませんint
。それらは「逆参照」されることなく直接アクセスされます。
プリミティブが(他のオブジェクトの一部として)ヒープに入る可能性があるという事実を推定して、軽量オブジェクトである可能性があると結論付けています。プリミティブのセットは、オブジェクトの状態を構成します。それら自体はオブジェクトではありません。
プリミティブには値があります。オブジェクトのような状態と動作はありません。それらは継承やポリモーフィズムなどを示しません。エンティティのようには動作しませんが、属性のように動作します。