📃
変数について
変数とは
記憶領域を保持して、値を一時的に保存できるようにしておく。
ただ、変数の更新を行った際に変数の型によって挙動が違う。
参照型(reference type)変数の場合
参照型(ListやMap等)は、メモリ上のアドレスを参照して保持している。
void main() {
List<int> list = [1, 2, 3];
print(list.hashCode); // リストの初期アドレスを表示
list = [1, 2, 3]; // 新しいリストを作成して代入
print(list.hashCode); // 新しいアドレスを表示
}
そのため、同じ値のリストだが参照しているのはアドレスなので、
変数の参照するアドレスの値が変更される。
プリミティブ型(value type)変数の場合
プリミティブ型(数値、文字列、ブール値など)の場合、値そのものをメモリに格納される。
原始型という言い方もされる。
void main() {
int a = 10;
print(a.hashCode); // 数値のハッシュコードを表示
a = 10; // 同じ値を代入
print(a.hashCode); // 同じハッシュコードを表示
}
上記のコードでは、値は変わらないのでハッシュコードは変わらない。
メモリ上のアドレスではなく、値をそのものを見ている。
※プリミティブ型でも値を変えるとハッシュコードは変わるが、メモリ上のアドレスが関与しているからではない。単に値が変わったから、ハッシュコードも変わっただけである。
変数に関わる用語
インスタンス変数、プロパティ、フィールド
= クラス内に定義された変数。(同じ意味の用語ありすぎだろ😅)
まとめ
参照型(リスト、オブジェクトなど):変数に新しいオブジェクトを代入すると、参照するアドレスが変更される。
値型(数値、文字列、ブール値など):新しい値を代入すると、値そのものが変更されるが、メモリ上のアドレスという概念は直接関係しない。
Discussion