gpt4 book ai didi

java - 为字符串数组中的字符串变量赋值

转载 作者:行者123 更新时间:2023-12-01 07:19:42 25 4
gpt4 key购买 nike

我正在尝试将值分配给数组的字符串变量:

String details = "passFirst0,passLast0,Molly,Quinn";
Passenger passenger = new Passenger(details);

public class Passenger {

private String firstNameField;
private String lastNameField;
private String firstName;
private String lastName;

public Passenger(String details) {
String[] temp = details.split(",");
String[] fields = {firstNameField, lastNameField, firstName, lastName};

for (int ctr = 0; ctr < fields.length; ctr++) {
fields[ctr] = temp[ctr];
}

// Print instance variables - all null
System.out.println(this.firstNameField);
System.out.println(this.lastNameField);
System.out.println(this.firstName);
System.out.println(this.lastName);

// Print array - has values
System.out.println(Arrays.toString(fields));
}

// Methods
}

但是,实例变量本身保持为空,而当您迭代数组时,fields[] 具有值。

为什么会这样以及如何实现这一点?

最佳答案

字符串对象是不可变的 - 您无法更改它们的值 - 在进行赋值时,您正在更改变量(或给定数组索引处的变量)所引用的对象。

当你这样做时:

String[] fields = {firstNameField, lastNameField, firstName, lastName};

您将 index 0 的 fields 数组值的引用设置为 firstNameField 所引用的同一对象(在本例中 null ),index 1 引用与 lastNameField 相同的对象,等等。

那么,如果你这样做:

fields[ctr] = temp[ctr];

没有更改对象的值fields[ctr]之前引用了temp[ctr]的值(您的实例变量之一),而是您正在设置 fields[ctr] 以引用 temp[ctr] 现在所引用的同一对象。

如果您想将变量作为数组引用,为什么不从一开始就将它们声明为数组呢?

关于java - 为字符串数组中的字符串变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43703233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com