Java 为什么盗窃.getTime()[0]=“0”;aaa“+;thift.getTimie()[0]don';你不能改变这个值吗?

Java 为什么盗窃.getTime()[0]=“0”;aaa“+;thift.getTimie()[0]don';你不能改变这个值吗?,java,Java,跑步时 public class Theft{ private String[] time =new String[4]; public String[] getTime() { return time = Arrays.copyOf(time, 4); } public void setTime(String[] time) { this.time = time; } } 为什么打印“sss”而不是“aaasss”?该值似乎没有更改。因为您每次都要创建它

跑步时

public class Theft{
  private String[] time =new String[4];
  public String[] getTime() {
    return time = Arrays.copyOf(time, 4);
  }

  public void setTime(String[] time) {
    this.time = time;
  }
}

为什么打印“sss”而不是“aaasss”?该值似乎没有更改。

因为您每次都要创建它的副本

Theft theft =new Theft();
theft.getTime()[0]="sss";
theft.getTime()[0]="aaa"+theft.getTime()[0];
System.out.println(theft.getTime()[0]);
输出:
aaasss

此行

public class Theft {
    private String[] time = new String[4];

    public String[] getTime() {
        return time; // Return the time itself, not a copy
    }

    public void setTime(String[] time) {
        this.time = time;
    }
}
一次发生几件事。让我们将其分解为单独的说明,以便更易于遵循:

theft.getTime()[0]="aaa"+theft.getTime()[0];
如您所见,更新的数组是已被其副本替换的
time1
。因此,更新被有效地丢弃

String[] time1 = theft.getTime();
String[] time2 = theft.getTime();
String newValue = "aaa"+time2[0];
time1[0] = newValue;