はじめに
プログラミングでは参照型と値型はよく出てきて理解することは重要です。特にnullの扱いには違いがあり、この違いを意識しないと思わぬバグを生んでしまうかもしれません。
この記事では、参照型と値型の違いをnullという観点から解説していきます!
結論
参照型 | 値型 | |
---|---|---|
メモリの扱い | メモリ(ヒープ)にデータが格納され、変数にはその参照アドレスが格納 | スタックにデータ自体格納 |
nullの扱い | nullを持てる(参照が未設定) | 通常はnullを持てない。Nullable型では可能 |
コピー時の動き | 参照がコピーされる(同じオブジェクトを指す) | 値がコピーされる(独立したデータが作られる) |
nullの扱い
参照型のnull
参照型では、変数がオブジェクトを指していない場合にnullを持つことができ、nullは「参照が設定されていない」状態を表します。
nullの状態のまま、プロパティやメソッドにアクセスしようとするとnullによる例外( NullReferenceException )が発生するので注意する必要があります。
NullExample.css
Person? person = null;
Console.WriteLine(person.Name); // 例外: NullReferenceException発生
値型のnull
値型(int、double、boolなど)は通常nullを持てません。しかし、C#ではNullable型を使用することで、値型にもnullを割り当てることができます。
int? age = null; // int型にはnullを代入できないが、Nullable型では可能
コピー
参照型のコピー
参照型では、コピー時に参照アドレスがコピーされるため、コピー元とコピー先が同じオブジェクトを指します。
copy1.css
Person person1 = new Person { Name = "Alice" };
Person person2 = person1; // 参照をコピー
person2.Name = "Bob";
Console.WriteLine(person1.Name); // 結果: Bob(同じオブジェクトを指している)
値型のコピー
値型では、コピー時に値そのものがコピーされるため、コピー元とコピー先は独立しています。
copy2.css
int num1 = 10;
int num2 = num1; // 値をコピー
num2 = 20;
Console.WriteLine(num1); // 結果: 10(元の値は変更されない)
おわりに
参照型と値型の概念について、私はnullの扱いを交えることで理解しやすくなりました!ただし、適切なnullチェックやデフォルト値設定を忘れないように注意しましょう。