【发布时间】:2021-02-15 08:25:11
【问题描述】:
我创建了空的 ArrayList 类对象和一个类对象。我将这个带有一些参数的类对象添加到 ArrayList 中,然后更改了这个对象的一些参数。但是留在 ArrayList 中的类对象也发生了变化。看起来我正在通过引用传递参数。此外,如果我尝试创建新对象并使其与“=”相等,则该对象将连接到旧对象,因此如果我要更改第一个对象,那么第二个对象也会更改,就像对第一个变量的引用一样。我在 Java 中遇到了同样的问题(不足为奇)。那么,如何按值传递类对象?我想使用一个类对象将新对象添加到 ArrayList 中,然后在不更改 ArrayList 中的类对象的情况下更改它。
class TestClass(var someData : Int = 0)
fun main(){
var testArrayList = arrayListOf<TestClass>()
var classObject : TestClass = TestClass(3)
testArrayList.add(classObject)
classObject.someData = 5
testArrayList.add(classObject)
classObject.someData = 7
testArrayList.add(classObject)
print(testArrayList[0].someData)
print(testArrayList[1].someData)
print(testArrayList[2].someData) //Output = 777. Needed 357
}
与创建新对象相同
class TestClass(var someData : Int = 0)
fun main(){
var testArrayList = arrayListOf<TestClass>()
var classObject : TestClass = TestClass(3)
var secondClassObject : TestClass = classObject
testArrayList.add(secondClassObject)
classObject.someData = 5
var thirdClassObject : TestClass = classObject
testArrayList.add(thirdClassObject)
classObject.someData = 7
var fourthClassObject : TestClass = classObject
testArrayList.add(classObject)
print(testArrayList[0].someData)
print(testArrayList[1].someData)
print(testArrayList[2].someData) //Output = 777. Needed 357
}
您尝试在 Java 中编写类似的代码,因为 Java 中的 arrayList 在这种情况下的工作方式相同。所以,你可以用 Java 代码发送答案
【问题讨论】:
-
这在我看来并不像 Java。
-
我不知道
arrayListOf做了什么,但您只创建了一个 TestClass 对象,然后您多次更新该对象。如果你想要 3 个不同的值,你需要创建 3 个不同的 TestClass 对象 -
@Stultuske 这是 Kotlin
-
@JoakimDanielson
arrayListOf存在于 Kotlin 中。 arrayListOf -
那如果是kotlin,为什么还要用Java标记?