📃

変数について

2024/06/14に公開

変数とは

記憶領域を保持して、値を一時的に保存できるようにしておく。
ただ、変数の更新を行った際に変数の型によって挙動が違う。

参照型(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