在C/ c++中
int arr[10] = {0};
...将所有数组元素初始化为0。
Java中有类似的快捷方式吗?
我想避免使用循环,可以吗?
int arr[] = new int[10];
for(int i = 0; i < arr.length; i++) {
arr[i] = 0;
}
在C/ c++中
int arr[10] = {0};
...将所有数组元素初始化为0。
Java中有类似的快捷方式吗?
我想避免使用循环,可以吗?
int arr[] = new int[10];
for(int i = 0; i < arr.length; i++) {
arr[i] = 0;
}
当前回答
你可以保存循环,初始化已经被设为0。即使是局部变量。
但是为了可读性(公认的最佳实践),请更正您放置括号的位置:
int[] arr = new int[10];
其他回答
在c/cpp中,除了初始化所有带有0下标的数组外,没有其他快捷方式。例:
int arr[10] = {0};
但是在java中有一个神奇的工具叫做Arrays.fill(),它可以用你选择的整数填充数组中的所有值。例:
import java.util.Arrays;
public class Main
{
public static void main(String[] args)
{
int ar[] = {2, 2, 1, 8, 3, 2, 2, 4, 2};
Arrays.fill(ar, 10);
System.out.println("Array completely filled" +
" with 10\n" + Arrays.toString(ar));
}
}
你可以保存循环,初始化已经被设为0。即使是局部变量。
但是为了可读性(公认的最佳实践),请更正您放置括号的位置:
int[] arr = new int[10];
是的,数组中的int值初始化为0。但你不能保证这一点。Oracle文档指出这是一种糟糕的编码实践。
正如每个人都提到的,初始化后int值已经为零。如果你确实需要将数组值设置为0并想要优化它,请使用System.arraycopy:
static private int[] zeros = new float[64];
...
int[] values = ...
if (zeros.length < values.length) zeros = new int[values.length];
System.arraycopy(zeros, 0, values, 0, values.length);
这在大多数或所有JRE实现中都在幕后使用memcpy。注意,即使是多线程,使用这样的静态也是安全的,因为最坏的情况是多个线程并发地重新分配零,这不会造成任何损害。
你也可以使用数组。填充就像其他人提到的那样。数组。fill可以在智能JVM中使用memcpy,但可能只是一个Java循环和随之而来的边界检查。
当然,要对优化进行基准测试。
您可以使用现有的数组大小创建一个新的空数组,并将它们赋给您的数组。这可能比其他方法更快。 Snipet:
package com.array.zero;
public class ArrayZero {
public static void main(String[] args) {
// Your array with data
int[] yourArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//Creating same sized array with 0
int[] tempArray = new int[yourArray.length];
Assigning temp array to replace values by zero [0]
yourArray = tempArray;
//testing the array size and value to be zero
for (int item : yourArray) {
System.out.println(item);
}
}
}
结果:
0
0
0
0
0
0
0
0
0