gpt4 book ai didi

java - Android:更改其他类的数组值

转载 作者:行者123 更新时间:2023-12-02 03:54:32 24 4
gpt4 key购买 nike

我有两个类。第一个类是

public class A{

private static int[] x = {0,0,0,0};
private static int justX = 0;

public A(){}

public static int[] getX(){return x;}
public static int getJustX(){ return justX;}
}

第二类是

public class B extends . . .{
private int[] x;
private justX;

public B(){
x = A.getX();
justX = A.getJustX();
Log.d("X: ", Arrays.toString(x)); //X: {0,0,0,0}
Log.d("JUST X: ", String.value(justX)); //JUST X: 0;
}

private void onTouch(){
x[0] = 1;
x[1] = 1;
x[2] = 1;
x[3] = 1;
justX = 1;

Log.d("X: ",Arrays.toString(A.getX())); //X: {1,1,1,1}
Log.d("JUST X: ", String.value(A.getJustX())); //JUST X: 0;
}
}

A类的数组变量改变了,但整型变量没有改变,为什么会发生这种情况?

最佳答案

您遇到的是,Java 对于基本类型(例如 int)始终是按值传递的,但对于对象类型,情况要复杂一些(数组是对象)。具体来说,发生的情况是,分配给具有引用类型的变量会更改它引用的对象,但不会创建新对象。分配给原始变量只会更改该变量的值。

让我们来回顾一下事情。

public class B extends . . .{
private int[] x;
private justX;

public B(){
x = A.getX();

此时,您已将 B.x 设为对 A.x 所引用的同一数组的引用。所以它们都是相同数据结构的名称。

        justX = A.getJustX();

这里 justX 刚刚获得了 A.justX 的值 (0)。

        Log.d("X: ", Arrays.toString(x)); //X: {0,0,0,0}
Log.d("JUST X: ", String.value(justX)); //JUST X: 0;
}

private void onTouch(){
x[0] = 1;
x[1] = 1;
x[2] = 1;
x[3] = 1;

在这里,您已到达B.x内部,并更改了其中各部分的值。但 A.x 也引用了同一个对象,因此当您查看 A.x 时,您会看到这些相同的更改。

        justX = 1;

在这里,您只需获取 B.justX 并为其赋予一个新值。

        Log.d("X: ",Arrays.toString(A.getX())); //X: {1,1,1,1}
Log.d("JUST X: ", String.value(A.getJustX())); //JUST X: 0;
}
}

希望这能解释为什么你会得到这样的结果。如果您想更改 A.justX,则需要明确执行此操作。如果您希望能够更改 B.x 而不更改 A.x,那么您需要显式创建一个新对象(例如,使用 .clone( ))。

关于java - Android:更改其他类的数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35610327/

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