【図で理解】値型と参照型のメモリ構造

まずはこの図を見てください。

今日はこのイラストを使って、

  • なぜ値型は独立するのか
  • なぜ参照型は連動するのか
  • なぜUnityで混乱が起きるのか

を、直感レベルで整理します。


■ 左側:値型(Value Type)

図の左側を見てください。

a = 10
b = a

b に a を代入したとき、

コピーされるのは「10という値そのもの」です。

つまりメモリの中ではこうなっています。

a → 10
b → 10(別の場所)

だから、

int a = 10;
int b = a;
b = 20;

としても、

a は 10 のままです。

なぜなら、

完全に別物だから


値型の特徴

  • データそのものを持つ
  • コピーすると中身もコピーされる
  • 軽量(int は4バイト)

代表例:

  • int
  • double
  • bool
  • struct

■ 右側:参照型(Reference Type)

右側を見てください。

s1 → 0x1234
s2 → 0x1234

ここでコピーされているのは

「中身」ではなく

「住所(参照)」です。

つまり、

Studentオブジェクト(実体)
        ↑
   s1 と s2 が指している

同じ実体を共有しています。


コードで確認

Student s1 = new Student();
s1.Name = "山田";

Student s2 = s1;
s2.Name = "佐藤";

Console.WriteLine(s1.Name);

class Student
{
    public string Name;
}

結果は?

佐藤

なぜ?

同じオブジェクトを指しているから。


■ なぜ設計が違うのか?

ここが重要です。

値型は小さい

int は 4バイト。

コピーしても軽い。


参照型は大きくなる可能性がある

class の中に:

  • 配列
  • 他のクラス
  • 大量のデータ

が入る可能性があります。

もし毎回コピーしていたら:

  • メモリが爆発
  • 処理速度が低下

だから、

「住所だけコピーする設計」

になっています。


■ まとめ(この図の本質)

値型:

「中身をコピー」

参照型:

「住所をコピー」

この違いを理解すると、

  • オブジェクト指向が整理される
  • Unityで混乱しない
  • バグの原因が見抜ける

■ 確認問題

  1. int はどちら?
  2. class はどちら?
  3. 配列は?
  4. string は?

訪問数 22 回, 今日の訪問数 22回

C#,参照型

Posted by hidepon