Java 为什么int[]a=新的int[0];允许?
有什么原因吗Java 为什么int[]a=新的int[0];允许?,java,Java,有什么原因吗 int[] myArray = new int[0]; 编译 这样的表达有什么用处吗? myArray[0] = 1; 给出java.lang.ArrayIndexOutOfBoundsException if (myArray == null) { System.out.println("myArray is null."); } else { System.out.println("myArray is not null."); } int[] myAr
int[] myArray = new int[0];
编译
这样的表达有什么用处吗?
myArray[0] = 1;
给出java.lang.ArrayIndexOutOfBoundsException
if (myArray == null) {
System.out.println("myArray is null.");
} else {
System.out.println("myArray is not null.");
}
int[] myArray = new int[0];
给出的myArray不为空。
所以我看不出为什么
int[]myArray=new int[0]
应该优先于myArray=null代码>是的,没有命令行参数,存在例如main方法执行。它提供一个0大小的数组,而不是null
public int[] getData()
{
if (iGotNothinForYa)
{
return new int[0];
}
int[] data = buildUpArray();
return data;
}
在代码中使用这样的方法返回的数据时,不必执行空检查通常更容易。尤其是在对数组进行迭代时
int[] data = getData();
for (int i : data) // yay! no null check!
{
doSomethingWith(i);
}
例如:
public void getArraySum(int[] array) {
int sum = 0;
for (int i = 0; i < array.length; i++)
sum += array[i];
return sum;
}
public void getArraySum(int[]数组){
整数和=0;
for(int i=0;i
这将适用于空数组,但不适用于null
引用
您只需保存一个冗余的null
检查。这就是为什么您还可以创建一个空列表,例如。为什么不可以
您可以使用目录中的.exe
文件列表获取数组。并且该目录不能有.exe
文件
在这种情况下,强制使用null
会使创建和处理数组的逻辑变得复杂,而且没有任何帮助
更新:更重要的是,Java中的数组大小在编译时决定。确实可以在编译时检测到new int[0]
,但是new int[System.currentTimeMillis%10]
不能。因此,在编译时检查0大小写并不能确保不会得到空数组。这只是为了减少空检查
您可以迭代空数组,但不能迭代null
以代码为例:
for (Integer i: myArray) {
System.out.println(i);
}
在空数组上它不打印任何内容,在空数组上它导致NullPointerException
if (myArray == null) {
System.out.println("myArray is null.");
} else {
System.out.println("myArray is not null.");
}
int[] myArray = new int[0];
java中的数组是常规对象。所以上面的代码表示数组大小为零。这对于防止空指针异常特别有用
与此类似,即使集合API也有一种初始化为空占位符的方法
List<String> list = Collections.EMPTY_LIST;
List List=Collections.EMPTY\u List;
当目标是为锁定对象使用最少的内存时,可以在线程同步中使用空数组。回想一下,数组是对象,因此如果希望在单个虚拟对象上同步多个线程,则可以使用的最小对象是空数组(可能是字节大小):
这是一个空数组--完全合法。在看过这些示例之后,我想知道为什么我没有考虑它们。。。它们是如此明显。即使这个概念没有实际用途(而且有很多),它也应该为了统一而存在。