Java打印空数组错误
这是我非常简单的代码,数据是一个空的双数组Java打印空数组错误,java,arrays,Java,Arrays,这是我非常简单的代码,数据是一个空的双数组 private void findLast(){ double empty[] = new double[0]; if(data == empty){ throw new ArrayIndexOutOfBoundsException(" Array is empty"); }else{ System.out.println(data[data.length-1]); } } 当我运行代码
private void findLast(){
double empty[] = new double[0];
if(data == empty){
throw new ArrayIndexOutOfBoundsException(" Array is empty");
}else{
System.out.println(data[data.length-1]);
}
}
当我运行代码时,我在线程“main”java.lang.ArrayIndexOutOfBoundsException:-1中得到异常
我的问题是,“抛出”和“如果”不应该阻止“其他”的运行吗?如何修复代码,使其正常运行 ==
测试数组等引用类型的引用相等性
empty==empty
为true
empty==newdouble[0]
为false
如果需要查找数组是否为空,请使用:
if (data.length == 0) {
在java中,==运算符检查两个变量是否引用同一个对象,而不是检查变量引用的两个对象是否具有等效值。因此,即使empty和data都是大小为0的双数组,data==empty也永远不会为真,因为它们不引用同一个对象
顺便说一句,我不确定你这样做有什么好的理由,而且大小为0的数组没有长度为-1的元素。如果empty有零个元素,那么创建它的意义是什么?如果它没有零元素,并且您想知道其中是否没有存储任何内容,那么您应该知道数组在初始化之后总是会存储一些内容 0-1=-1
并且没有像-1这样的索引。但是它不应该运行吗?对不起,但是你说的它不应该运行是什么意思呢?如果“if”部分为真,其他部分不应该发生吗?约翰卡西奇,不,不是这样的。我也尝试过,但是我得到了“Exception in thread”main“java.lang.ArrayIndexOutOfBoundsException:数组为空”@JohnKasich_2016这不是您想要的输出吗?如果您不想抛出异常,那么就不要抛出异常。@JohnKasich_2016 ofcs您的数组为空。我将其作为错误消息获取,其余代码不会运行。我希望它打印“数组为空”“然后让代码的其余部分run@JohnKasich_2016我建议发布更多代码。看来你把事情搞砸了。
if(data.length==empty.length)
{
throw new ArrayIndexOutOfBoundsException(" Array is empty");
}else{
System.out.println(data[data.length-1]);
}