我经常听到术语" Mutable引用不可变数据"。就我而言,这是针对Scala的。 如果你有一个可变的引用,这是否意味着不可变数据是可变的?我很难理解它的理论和实践方面。例子很棒。
答案 0 :(得分:5)
这意味着您可以改变引用(更改它引用的内容)但不改变数据(更改引用后面的内容)。只要有多个数据引用就会产生差异,这种情况一直发生在像Scala这样的语言中(赋值,参数传递,添加到集合等)。例如:
var x = List(1);
var y = x;
x = List(2);
// y.head == 1
// x.head == 2
请注意,这种区别甚至适用于Java:
String x = "foo";
String y = x;
x = "bar";
// y.equals("foo")
// x.equals("bar")
请注意,在这两个示例中,我们都改变了引用x
和y
,但我们没有(实际上不能)改变它们引用的对象。