对可变数据的可变引用

时间:2014-05-31 11:50:41

标签: scala concurrency functional-programming immutability mutable

我经常听到术语" Mutable引用不可变数据"。就我而言,这是针对Scala的。 如果你有一个可变的引用,这是否意味着不可变数据是可变的?我很难理解它的理论和实践方面。例子很棒。

1 个答案:

答案 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")

请注意,在这两个示例中,我们都改变了引用xy,但我们没有(实际上不能)改变它们引用的对象。