[英]Java array length less than 0?
我正在經歷一個他們正在創建輸出流的開源項目,並遇到了以下方法:
@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));
}
}
所以byte[] buffer
只是一個普通的舊byte[]
。 我們知道它不是空的。 它甚至可以使它的長度小於0嗎? 比如,它可以通過反思完成,這就是他們正在防范的事情嗎?
不,這永遠不會發生。 根據Java規范,長度保證是非負的。
數組類型的成員是以下所有成員:
- public final字段長度,包含數組的組件數。 長度可以是正數或零 。
資料來源: JLS§10.7
正如mprivat所提到的,如果您嘗試創建負數大小的數組,則會拋出NegativeArraySizeException 。
我不相信這是可能的。 即使通過反射,它也會受到NegativeArraySizeException的保護
這只是一個異常處理問題。 您可以在Java中創建一個負數大小的數組 - 它在編譯時甚至不會拋出異常。 但在運行時,您的程序將不會運行,直到更正。 (它會拋出NegativeArraySizeException
。)
問題是在運行時而不是編譯時拋出此異常 - 這就是使用IllegalArgumentException
處理異常的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.