代码之家  ›  专栏  ›  技术社区  ›  Ronald

两个Scala类实例的赋值

  •  0
  • Ronald  · 技术社区  · 3 年前
    class Counter {
      var counter: Int = 0
      def increaseCounter(): Unit =
        counter = counter + 1
    }
    
    var counter1 = new Counter
    var counter2 = new Counter
    
    counter1 = counter2
    
    counter1.increaseCounter()
    counter2.counter // => 1
    

    我真的不明白为什么计数器2的计数器改变了,尽管我只改变了计数器1的计数器。Scala类实例只是指针吗?在这种情况下,counter1和counter2指向同一个对象?

    1 回复  |  直到 3 年前
        1
  •  4
  •   Tim    3 年前

    Scala 变量 只是指针,因此:

    counter1 = counter2
    

    两者都有 counter1 counter2 指向同一个实例。

    这种隐藏的依赖关系是你应该避免的原因 var 并始终创建新对象,而不是修改现有对象。

        2
  •  2
  •   blade    3 年前

    对就像在Java中一样。你所做的只是一个肤浅的复制品。如果要将一个要复制的值分配给另一个,则需要深度复制。你需要 counter1.counter=counter2.counter