在Java中更改数组的值
我有一个数组:在Java中更改数组的值,java,if-statement,Java,If Statement,我有一个数组: int[] arr = {-15, -23, -34, -22, 2}; 我尝试执行一个if语句,如果值低于0,那么数组值将更改为-1。如果值大于0,则数组值将更改为1 public static void main(String[] args) { int[] swap; int[] arr = {-15, -23, -34, -22, 2}; swap = arr;
int[] arr = {-15, -23, -34, -22, 2};
我尝试执行一个if语句,如果值低于0,那么数组值将更改为-1。如果值大于0,则数组值将更改为1
public static void main(String[] args) {
int[] swap;
int[] arr = {-15, -23, -34, -22, 2};
swap = arr;
for (int x = 0; x < arr.length; x++) {
System.out.println(arr[x]+swap[x]);
}
for (int i = 0; i < arr.length; i++) {
// System.out.println(arr[i]);
if (arr[i] < 0) {
arr[i] = -1;
System.out.println("Oringinal value "+swap[i] + " Error Code: " + arr[i]);
}
if (arr[i] > 0) {
arr[i] = 1;
System.out.println("Oringinal value "+swap[i] + " Error Code: " + arr[i]);
}
}
}
我做错了什么
int[] swap;
int[] arr = {-15, -23, -34, -22, 2};
swap = arr;
使用最后一个命令,您不是在复制数组,而是在arr
中将对同一数组的引用分配给swap
变量。因此,arr
上的任何更改都将反映在swap
上
为了克隆阵列并保留原始值,您可以这样初始化它,创建深度副本:
int[] swap = Arrays.copyOf(arr, arr.length);
如Arvind所述,您还可以在arr
上调用arr.clone()
创建浅拷贝:
int[] swap = arr.clone();
基元数组上的浅拷贝没有对象(不包括字符串)在这里的副作用
int[]arr={-15,-23,-34,-22,2}代码>
arr
是一个参考。它当前指向该阵列;考虑数组宝藏,和<代码> ARR < /代码>可以找到它的地图。< /P>
int[]swap=arr代码>
这将生成一个新的宝藏地图,它指向完全相同的宝藏
arr[i]=1代码>
这将按照arr
地图找到X,向下挖掘,打开宝箱,并在那里做一些事情<代码>交换
,考虑到这是一个不同的地图,但它指向的是完全相同的宝藏,现在它的属性是,如果您遵循该地图,您将发现相同的更改。毕竟,只有一种财富
解决办法是复制这一宝藏<代码>数组。例如,copyOf(arr)
可以做到这一点。交换必须是arr的深度副本,例如
int[] arr = {-15, -23, -34, -22, 2};
int[]swap = Arrays.copyOf(arr, arr.length);
使用这段代码,您实际上在swap中保存了arr数组的引用。这意味着两个名称都引用同一个数组。因此,您必须复制名为arr的数组
int[]swap = Arrays.copyOf(arr, arr.length);
请显示swap
-Array的声明。int[]swap=Arrays.copyOf(arr,arr.length)
我们不知道什么是swap
,但您可以看到arr[i]
的新值,这仅仅是因为您在打印之前设置了它。更改了上面的代码使用@iłyaBursov的建议,或者在循环本身中复制一份swap=arr
不复制数组的元素,因此arr
和swap
是单个数组的两个名称。
int[] swap;
int[] arr = {-15, -23, -34, -22, 2};
swap = arr;
int[]swap = Arrays.copyOf(arr, arr.length);