Java数组长度小于0?

cor*_*iKa 24 java arrays

我正在经历一个他们正在创建输出流的开源项目,并遇到了以下方法:

@Override public void write(byte[] buffer, int offset, int length) {
    if (buffer == null) {
        throw new NullPointerException("buffer is null");
    }
    if (buffer.length < 0) { // NOTE HERE
        throw new IllegalArgumentException("buffer length < 0");
    }
    if (offset < 0) {
        throw new IndexOutOfBoundsException(String.format("offset %d < 0", offset));
    }
    if (length < 0) {
        throw new IndexOutOfBoundsException(String.format("length %d < 0", length));
    }
    if (offset > buffer.length || length > buffer.length - offset) {
        throw new IndexOutOfBoundsException(String.format("offset %d + length %d > buffer"                                                       " length %d", offset, length, buffer.length));
    }
}
Run Code Online (Sandbox Code Playgroud)

所以这byte[] buffer只是一个正常的老byte[].我们知道它不是空的.它甚至可以使它的长度小于0吗?比如,它可以通过反思完成,这就是他们正在防范的事情吗?

tsk*_*zzy 29

不,这永远不会发生.根据Java规范,长度保证是非负的.

数组类型的成员是以下所有成员:

  • public final字段长度,包含数组的组件数.长度可以是正数或零.

资料来源:JLS§10.7

正如mprivat所提到的,如果您尝试创建负数大小的数组,则会抛出NegativeArraySizeException.

  • @Reimeus:因为程序员从不犯任何错误,总是编写最优的代码. (9认同)
  • @Reimeus给好人们一些东西来讨论. (5认同)

mpr*_*vat 6

我不相信这是可能的.即使通过反射,它也会受到NegativeArraySizeException的保护