- ★★Java質問・相談スレッド174★★ [転載禁止]©2ch.net
652 :デフォルトの名無しさん[sage]:2015/09/17(木) 18:34:04.45 ID:n3PeWc41 - 今こういう理解をしているんですが、間違いがあれば指摘していただけないでしょうか。
1.実行される順番は、staticイニシャライザ → インスタンスイニシャライザ → インスタンスコンストラクタ。 2.プリミティブ型とString型は定数プールに作られて、それを参照するためのアドレスがスタックに置かれる。 3.参照型はヒープに実体が作られて、それを参照する為のアドレスがスタックに置かれる。 4.Stringや参照型を比較する際、==では、実体を指しているアドレスの値が同じか比較。 equasでは、実体の持つ情報(文字列やプロパティの中身)が同じかどうか比較。
|
- ★★Java質問・相談スレッド174★★ [転載禁止]©2ch.net
654 :デフォルトの名無しさん[sage]:2015/09/17(木) 18:55:19.24 ID:n3PeWc41 - >>653
すみません、 newしない場合は定数プールに、newした場合はヒープでいいんでしょうか。 わけのわかる段階を目指してる段階なので・・・・
|
- ★★Java質問・相談スレッド174★★ [転載禁止]©2ch.net
656 :デフォルトの名無しさん[sage]:2015/09/17(木) 19:29:41.08 ID:n3PeWc41 - インターンプールというのは構造体みたいなのでしょうか?
例えば、int a,b,cやString d,e,fという変数があれば、 int{ a=1,b=2,c=3, } String{ d="文字1"; e="文字2"; f="文字3"; } のように保存されていき、 new Integer(a)みたいにボクシングすると、ヒープに数値、スタックにヒープのアドレスが記録されるという感じですか?
|
- ★★Java質問・相談スレッド174★★ [転載禁止]©2ch.net
659 :デフォルトの名無しさん[sage]:2015/09/17(木) 20:24:27.54 ID:n3PeWc41 - >>658
この場合はVALUEは全部定数プール(=インターンプール?)で、文字列の値が同じなので、value/A.VALUE/B.VALUEは同じ場所を参照して、==だとtrueでいいんですよね? public class A{ public static final String val = new String("ABCD"); } ってすると、valはヒープに記録されるので、==ではfalse、equalsではtrueに。
|
- ★★Java質問・相談スレッド174★★ [転載禁止]©2ch.net
662 :デフォルトの名無しさん[sage]:2015/09/17(木) 21:18:46.58 ID:n3PeWc41 - C#の情報を見つけたんですが、このページでは、自分が定数プールの機能だと思っていた事を、インターンプールという言葉で説明されていました。
https://msdn.microsoft.com/ja-jp/library/system.string.intern(VS.80).aspx >共通言語ランタイムは、インターン プールと呼ばれるテーブルを保持することで文字列のストレージを管理しています。 >このテーブルには、プログラム内で宣言または作成された一意のリテラル文字列に対する単一の参照が含まれています。 >この結果として、特定の値を持つリテラル文字列のインスタンスは、システムに 1 つしか存在しません。 >たとえば、いくつかの変数に同じリテラル文字列を代入した場合、ランタイムはそのリテラル文字列に対する同じ参照をインターン プールから取得して、それぞれの変数に代入します。 はっきりした事が分かるまで、暫定で"定数プール=インターンプール"と考えることにします。
|
- ★★Java質問・相談スレッド174★★ [転載禁止]©2ch.net
665 :デフォルトの名無しさん[sage]:2015/09/17(木) 22:27:53.81 ID:n3PeWc41 - >>663
ありがとうございます。 言語仕様やJVM仕様について勉強するのに良い書籍やサイトはないでしょうか? そこを勉強しないと、何しても自信も確信も持てないです・・・ (Javaにおけるスタックやコンスタントプールやインターンプールといった言葉で実体を想像し切れない) amazonで目次を見ても、コーディング上の文法とかパフォーマンスを説明する書籍ばかり多くて探しきれません。
|
- ★★Java質問・相談スレッド174★★ [転載禁止]©2ch.net
668 :デフォルトの名無しさん[sage]:2015/09/17(木) 22:47:30.98 ID:n3PeWc41 - >>667
ありがとうございます。 公式は英語が苦手で敬遠してたんですが、やっぱり一番ですよね。 頑張って読んでみます。ありがとうございました。
|
- ★★Java質問・相談スレッド174★★ [転載禁止]©2ch.net
670 :デフォルトの名無しさん[sage]:2015/09/17(木) 23:11:01.20 ID:n3PeWc41 - >>669
ありがとうございます。 >Objectで用意されたequalsメソッドは参照値比較しかしてない ということは、標準クラスライブラリに含まれる各クラスのequalsメソッドは、漏れなくObject.equalsメソッドをオーバーライドしているという事ですか。 条件についてもこれから言語仕様を読んでしっかり勉強します。
|