Я попробовал следующий код, который имеет переменный с final
экземпляра под названием data
.Это экземпляра в конструкторе с использованием int[]
argument.If элемента Int [] изменения массива, изменение отражается в переменной экземпляра и показано в выводе show()'s
. Однако, если я устанавливаю внешний массив в нуль или в новый массив, это изменение не отражается в выводе show().конечные переменная экземпляра массива в классе Java и сброс ссылки
Почему это происходит? если внешний массив изменен ext [0] = x, это изменение отображается в inst.variable.It не происходит, если ссылка ext установлена на новый объект.
public class MutabilityTest {
public static void main(String[] args) {
int[] ext = new int[] {1,2,3,4,5};
FMutable xmut = new FMutable(ext);
mut.show(); //shows [1,2,3,4,5]
System.out.println("changed ext array");
ext[0] = 99;
System.out.println("ext:"+Arrays.toString(ext)); //[99,2,3,4,5]
mut.show(); //shows [99,2,3,4,5]
System.out.println("set ext array to new");
ext = new int[]{8,8,8,8}
System.out.println("ext:"+Arrays.toString(ext)); //[8,8,8,8]
mut.show();//expected [8,8,8,8] but got [99,2,3,4,5]
ext = null;
System.out.println("ext:"+Arrays.toString(ext)); //null
mut.show(); //shows same [99,2,3,4,5]
}
}
class FMutable{
private final int[] data;
public FMutable(int[] indata){
this.data = indata;
}
public void show(){
System.out.println("XMutable:"+Arrays.toString(this.data));
}
}
in java .. Объект paassed по refrence и типам данных, переданным по значению ... –