java - 在 Java 中更改数组的值
问题描述
我有一个数组:
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]);
}
}
}
我当前的代码在上面。
目标是使用更改后的“错误代码”打印原始数组值。
但是,打印输出正在使用原始值重新调整相同的值。
Oringinal value -1 Error Code: -1
Oringinal value -1 Error Code: -1
Oringinal value -1 Error Code: -1
Oringinal value -1 Error Code: -1
Oringinal value 1 Error Code: 1
我究竟做错了什么?
解决方案
int[] swap;
int[] arr = {-15, -23, -34, -22, 2};
swap = arr;
使用最后一个命令,您不是复制数组,而是将对同一数组的引用分配给arr
变量swap
。因此,任何更改arr
都将反映在swap
.
为了克隆数组并保留原始值,您可以像这样初始化它,创建一个深拷贝:
int[] swap = Arrays.copyOf(arr, arr.length);
正如Arvind所指出的,您还可以调用arr.clone()
创建arr
一个浅拷贝:
int[] swap = arr.clone();
原始数组上的浅拷贝没有对象(不包括字符串)在此处产生的副作用。
推荐阅读
- kubernetes - 重启集群时出错:等待 apiserver:等待条件超时
- javascript - 当我尝试将它放在 tr td 上时,为什么 jQuery 中继器的添加按钮不起作用?
- arraylist - 如何使用 Leitner System 将数组拆分为子数组并显示项目?
- laravel-5 - 如何从路由中调用文件
- c# - asp.net mvc 5,验证非必填字段(可选字段)
- excel - 创建 en excel 公式并将此公式传递给模块 f2() 的函数出错
- angular - 以 Angular 反应形式一次显示一个问题
- php - Laravel 总是从 JSON 帖子中获取空
- c# - 如何在 Quickbooks 桌面发票中添加 SO Number 字段。我无法在发票添加的 api 参考中找到它
- exception - MathLinkException C# - Mathematica