2012-12-04 48 views
2

在jdk中,有很多地方需要檢查與array.eg相關的參數。爲什麼jdk中的「offset + length <0」確定參數是否非法?

/*.......... 
* 
* @throws IllegalArgumentException 
*   If <tt>offset</tt> is negative or greater than 
*   <tt>buf.length</tt>, or if <tt>length</tt> is negative, or if 
*   the sum of these two values is negative. 
* 
* @param buf Input buffer (not copied) 
* @param offset Offset of the first char to read 
* @param length Number of chars to read 
*/ 
public CharArrayReader(char buf[], int offset, int length) { 
    if ((offset < 0) || (offset > buf.length) || (length < 0) || 
      //$ offset+length 
     (**(offset + length) < 0)**) { 
     throw new IllegalArgumentException(); 
    } 
    this.buf = buf; 
    this.pos = offset; 
    this.count = Math.min(offset + length, buf.length); 
    this.markedPos = offset; 
} 

爲什麼「(偏移+長度)< 0」是必要的?

回答

2

在Java中int已簽名,因此可能發生兩個正數int加在一起導致負值。它被稱爲環繞或Integer Overflow

1

我相信它是檢查溢出。

int的範圍是-2,147,483,648至2,147,483,647。

從代碼你可以看到,有些地方我們需要偏移+長度。如果偏移量+長度大於2,147,483,647,它會給出問題,並且(偏移+長度)< 0)正在檢查這種情況。

相關問題