2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なにもわからないAdvent Calendar 2024

Day 10

参照型と値型の違いをnullから考える

Last updated at Posted at 2024-12-09

はじめに

プログラミングでは参照型と値型はよく出てきて理解することは重要です。特に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チェックやデフォルト値設定を忘れないように注意しましょう。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?