【发布时间】:2020-12-07 10:31:13
【问题描述】:
我对 var 和 let 在 swift 中的引用类型之间的区别感到困惑。
在下面的代码中,让 head 赋值给 var current:
public class ListNode {
public var val: Int
public var next: ListNode?
public init() { self.val = 0; self.next = nil; }
public init(_ val: Int) { self.val = val; self.next = nil; }
public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
}
var current = ListNode()
let head = current
current.next = ListNode(3)
current = current.next!
print(current.val) -> return "3"
print(head.val) -> return "0"
print(head.next?.val) -> return "3"
我不明白为什么最后 head.val = 0 和 head.next.val = 3。
我知道 head 和 current 是类的一个实例,因此它们是引用类型。它们应该指向完全相同的内存地址。但我很困惑为什么
当前 = current.next!
不会使 head 也等于 current.next。
head 和 current 不是指向同一个内存地址吗?为什么它们可以是不同的值?如果有人告诉我, head 不能改变值,因为它是一个常量,那么为什么 head.next?.val 改为 3?
答案一定很明显,因为我没有看到有人问这个问题。但我只是迷路了。谢谢!
【问题讨论】:
标签: swift variables linked-list constants reference-type