请注意,变量引用(var,val)的类型与引用本身有关,而不是与被引用对象的属性有关。这意味着当使用只读引用(val)时,我们将无法更改指向特定对象实例的引用(我们将无法重新分配变量值),但我们仍然能够修改被引用对象的属性。让我们使用一个数组来查看它的操作:
val list = mutableListOf("a","b","c") //1
list = mutableListOf("d", "e") //2 Error
list.remove("a") //3
请考虑执行以下代码:
data class ReferencedObject(
val valAttribute: String,
var varAttribute: String
)
fun main() {
val reference = ReferencedObject(
valAttribute = "cant change",
varAttribute = "can change"
)
// it doesn't compile because reference can't be reassigned
// val reference = ReferencedObject(
// valAttribute = "cant change",
// varAttribute = "can change"
// )
// it doesn't compile because valAttribute of referenced object can't be reassigned
// reference.valAttribute = "change"
// it works because the var attribute of referenced object can be reassigned
reference.varAttribute = "change"
}
在本例中,reference
是指向referencedObject
类型的对象的最后一个“变量”。被引用的对象有两个属性:valAttribute
是imutable的,而varAttribute
不是imutable的。
因此,当您运行reference.varattribute=“change”
时,您不是在更改引用变量,而是在更改被引用的对象。
我的问题是为什么第二版是Abhishek..我在vo4对象中保留了一个vo1对象的副本,而不是引用。这意味着它创造了一个新的记忆。vo1和vo4是不同的。那么为什么vo4.getname在第二次更改。我正在设置vo1对象,但vo4是自动更改的。为什么会发生??
问题内容: 我从“ Head First Java”学习“多态”,然后想到了这个概念。有人可以举例说明吗? 编译器检查引用类型的类,而不是对象类型。 那么引用类型和对象类型之间有什么区别? 问题答案: 我认为它们对“对象类型”和“引用类型”的使用不是标准化的,但这是我的解释。 考虑以下代码: 该 引用 是类型的。它引用的 对象 是类型。 因此,“引用类型”为,“对象类型”为。 造成这种混乱的原因是
我不知道“?”和“:”的用法。
问题内容: 斯威夫特有: 强引用 参考文献薄弱 无人参考 无主引用与弱引用有何不同? 什么时候可以使用无主引用安全? 无主引用是否像C / C ++中的悬空指针一样具有安全风险? 问题答案: 双方并引用不创建一个被引用的对象上保持(又名它们不会取消分配引用的对象增加,为了保留计数,以防止电弧)。 但是为什么要两个关键词呢?这种区别与类型内置在Swift语言中这一事实有关。长话短说:可选类型提供了内
变量、对象和引用之间到底有什么区别? 例如:它们都指向某种类型,并且它们都必须保存值(当然,除非您有临时的可null类型),但是它们的功能和实现之间有何不同? 例子: 它们有相同的概念,但又有什么不同呢?
问题内容: Java中的单引号和双引号之间有区别吗? 问题答案: 对文字s 使用单引号,对文字s 使用双引号,如下所示: 不能以其他任何方式使用它们(例如,在Python中)。