この章のテーマ §
代入演算子(=演算子)について学びます。
前提知識 §
Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, 配列, int型
解説 §
代入演算子(=演算子)は変数等に値または参照を格納します。
必ず覚えて頂きたいことは2つあります。
1つめは、代入演算子の右側は左辺値と呼ばれ、自由な式を書くことができないことです。たとえば、1という数値は書き換えることができません。左辺値にはなれません。変数aなら左辺値にできます。変数は書き換えられるからです。
2つめは、値型は値を代入するが、参照型は参照を代入することです。参照とは、住所のようなもので、そのオブジェクトの場所を覚えておくだけの情報です。ですから、その場所のオブジェクトの中味が改訂されれば、参照が同じでも取得する値は改訂後の値になります。値型なら値のコピーが作られるので、いくらもとのデータを改訂しても、改訂前の複製が残るだけです。
サンプルソースの場合、配列は参照型ですが、配列のメンバーの数値は値型です。ですから、配列そのもの(参照)を代入した場合と、配列のメンバー(値)を代入した場合では挙動が変わります。
罠の数々 §
- 一致を比較する演算子==と、代入演算子=は別物である。機能は全く似ていないので混同しないこと
- 変数宣言で初期値を指定する=と、代入演算子=は別物である。かなり使い方は似ているが細部に異なる部分がある
参考リンク §
代入演算子 (C# リファレンス)
サンプルソース: assignmentOperator §
int[] array = new int[1];
array[0] = 123;
Console.WriteLine($"array[0]={array[0]}");
int x;
int[] y;
// 値型の代入
x = array[0];
// 参照型の代入
y = array;
Console.WriteLine("値の更新 (参照は更新しない)");
array[0] = 456;
Console.WriteLine($"array[0]={array[0]}");
Console.WriteLine($"x={x}");
Console.WriteLine($"y={y[0]}");
実行結果 §
array[0]=123
値の更新 (参照は更新しない)
array[0]=456
x=123
y=456
リポジトリ §
https://github.com/autumn009/CSharpPrimer2
練習問題 §
左辺値(代入演算子の左側にできるもの)として間違っているのはどれだろうか。
ただし、aはint型の変数名。arrayはint型の一次元配列名とする。
- a
- array
- array[a]
- array[a+1]
- array[a]+1
[[解答]]