Skip to content

21 Collection value semantics ​

Assigning a built-in collection gives the new binding an independent container value.

norm
main() {
  List<Integer> original = [1, 2]
  List<Integer> changed = original
  printLine(original == changed)
  changed.add(3)
  printLine(original.size())
  printLine(changed.size())
  printLine(changed[2])
  printLine(original == changed)
}

Expected output:

text
true
2
3
3
false

The copies initially compare equal. Adding to changed leaves original at two elements; equality then becomes false because their contents differ. Elements that are class objects can still share their own identity.

Try it: Add the same third element to original and compare equality again.

Precise rules: Reference.

Norm 0.25