如何在Scala中分配引用而不是值?

时间:2016-06-26 09:55:02

标签: java scala

以下面的代码为例,

var a = new StringBuffer("Foo!")
val b = a
a = null
println(b)

我预计 b 的值会变为 null ,但它没有。与分配引用的Java不同,此处 a 已复制到 b 。我们如何在Scala中分配引用而不是仅仅复制值?

2 个答案:

答案 0 :(得分:4)

你不能在Scala中这样做。而BTW的工作方式与Java中的完全相同:

public class Test {
  public static void main(String... args) {
    StringBuffer a = new StringBuffer("Foo!");
    StringBuffer b = a;
    a = null;
    System.out.println(b);
    // Foo!
  }
}

还有Python,我可能会添加,查看您的用户名:

a = ['Foo!']
b = a
a = None
b
# >>> ['Foo!']

答案 1 :(得分:1)

这是所有理智语言中的预期行为。可以想象所有的变量和值都是指针,事实上,它们都是指针,它们是(原始类型除外)。

这只是伪代码,具有类似c的指针语义

StringBuffer* a = new StringBuffer("Foo!")
StringBuffer* b = a
a = null
println(b)

毕竟,b仍然指向您在第一行中创建的对象。