基本型 プリミティブ型 変数とメモリ - 萌えJava超入門
第十一章
メモリで見る基本型とクラス型の違い

基本型(プリミティブ型)変数とメモリ

基本型(プリミティブ型)変数とメモリの関係をみてみましょう。

目次


1. サンプルプログラム

以下のコードを例にして、メモリのなかで何が起こっているのか見てみましょう。

//Sample06_01.java
class Sample06_01 {
  public static void main(String[] args){

    int num_01;
    num_01 = 4126;  //代入
    System.out.println("num_01 = "+num_01);
    System.out.println("----------");

    int num_02;
    num_02 = num_01;  //代入

    System.out.println("num_01 = "+num_01);
    System.out.println("num_02 = "+num_02);
  }
}

コマンドライン
>javac Sample06_01.java
>java Sample06_01
num_01 = 4126
----------
num_01 = 4126
num_02 = 4126

num_01 と num_02
2つの変数が使われているな。


2. 基本型(プリミティブ型)変数の宣言

基本型(プリミティブ型)は、データ型ごとにメモリサイズが決まっています。
この為、変数を宣言した時点で必要分のメモリを確保しています。

変数num_01とメモリアドレスの紐づけ
int num_01;
変数 num_01 が宣言されると、任意の場所のメモリが確保されます。
確保されるメモリのサイズは、intなので 4byteです。
図では、変数 num_01 がメモリアドレス「0x0038」に紐づいた例を示しています。
今後、変数num_01は、
メモリアドレス 0x0038 として処理される。



この時 0x0038 の中は空っぽ?
鋭いなぁ。
メソッドの中で宣言した変数は空っぽだ。(注1)
参照するとエラーになる。
classの直下に宣言した変数は「規定値」が入る。
(注1)厳密には「意味のない何らかの値」が入っていますが参照できません。


この場合は、
mainメソッドの中だから空っぽか~。
てゆうか、
classの直下に変数が宣言できるのね?
その通り。
この解説も、もう少しあとで。
変数のスコープ(有効範囲)と
併せて説明したい。


3. 変数に値を代入する


変数への代入
num_01 = 4126;
変数 num_01 に紐づいたメモリアドレス 0x0038 に値が代入されました。

変数の宣言時にメモリが確保されて、
確保されたメモリに
直接値を書き込んでいるのが特徴だ。
なるほど。
まあ想像通りよね。


4. 変数に別の変数の値を代入する


変数num_02とメモリアドレスの紐づけ
int num_02;
変数 num_02 が宣言されると、これも任意の場所のメモリが確保されます。
図では、変数 num_02 がメモリアドレス「0x0064」に紐づいた例を示しています。
今後、変数num_02は、
メモリアドレス 0x0064 として処理される。

num_02 = num_01 が実行されるとこんな感じになります。

num_02 = num_01;
変数 num_01 に紐づいたメモリアドレス 0x0038 の値が、
変数 num_02 に紐づいたメモリアドレス 0x0064 に代入されました。


割と普通だろ?
わざわざ一章割いて説明する内容なのか
疑問なほどよ?
OK!
ほんじゃ楽しい方行ってみよう。

クラス型変数ではどうでしょうか。




© 2019 awasekagami