gpt4 book ai didi

java - 不可变数组的修改不起作用

转载 作者:行者123 更新时间:2023-11-29 04:08:41 26 4
gpt4 key购买 nike

<分区>

修改了使数组不可变的代码,但它在某处出错了。在代码中,当为 ImmutableClassWithArray 创建对象时,列表正在用给定的数组初始化。在 getter 内部,不可修改的列表被返回并转换为数组。之后数组被修改。即使在调用构造函数后数组已被更改意味着在列表已经用一些值初始化之后,最终数组仍然会反射(reflect)出更新后的值。

public final class ImmutableClassWithArray {

private final Integer[] arr= {1,2,3,4};
List<Integer> list;

public ImmutableClassWithArray() {
this.list = Collections.unmodifiableList(Arrays.asList(arr));
}

public Integer[] getArr() {
return (Integer[]) this.list.toArray();
}

public static void main(String[] args) {
ImmutableClassWithArray ob = new ImmutableClassWithArray();
System.out.println("list value after copying array "+ob.list.get(2));
ob.arr[2]=5;
System.out.println("arr value after modified "+ob.arr[2]);

Integer[] a = ob.getArr();
System.out.println("a value - "+a[2]);

}
}

输出:->

复制数组 3 后的列表值

修改后的arr值5

一个值 - 5

整数[] a = ob.getArr();应该返回数组的原始值,因为列表在值被改变之前已经被初始化。但是在输出中得到“一个值 - 5”时,它应该是“一个值 - 3”。

提前致谢!!!!!!

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