簡體   English   中英

Java數組長度小於0?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM