java 可忽略参数_arraycopy():当length参数为0时,Java是否忽略索引参数?

我写了一些我认为应该在某些条件下失败的代码,但事实并非如此.我正在做一个arraycopy(),在某些情况下会要求复制到越界索引,但在所有这些情况下,传递给arraycopy()的长度将为0.

我唯一的猜测是Java的arraycopy()实现首先检查length = 0,如果是,则返回而不检查索引参数?我找不到任何关于arraycopy()内部如何工作的参考.

如果这是Java实现它的方式,并且代码工作正常,我的直觉告诉我,我仍然应该编写代码,这样就不会发生.我应该担心吗?

代码是:

if (manyItems == data.length) {

ensureCapacity(manyItems * 2 + 1);

}

if (manyItems == currentIndex) {

data[currentIndex] = element;

}

else { // if data.length = 10, manyItems = 9, currentIndex = 8,

// currentIndex + 2 = 10, which is out of bounds.

// But manyItems - currentIndex -1 = 0, so nothing is copied.

System.arraycopy(data, currentIndex + 1, data, currentIndex + 2,

manyItems - currentIndex - 1);

data[currentIndex + 1] = element;

currentIndex++;

}

对我来说似乎很奇怪,但也许我没有正确地思考它?我应该只使用manyItems> = data.length-1确保容量吗?

最佳答案 即使长度为0,也会测试索引.如果索引是数组的长度,则索引可以超出范围,但任何更大的索引都会触发ArrayIndexOutOfBoundsException.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值