java.nio.Buffer.java源碼中有如下代碼:
static void checkBounds(int off, int len, int size) { if ((off | len | (off + len) | (size - (off + len))) < 0) throw new IndexOutOfBoundsException(); }
對
if ((off | len | (off + len) | (size - (off + len))) < 0)
很好奇,如果我自己寫,可能會寫成
if (off < 0 || len < 0 || (off + len) < 0 || (size- (off + len)) < 0)
按位或運算大家都知道,所以如果有一個數是負數,則結果也是負數。
如果有對按位或運算(|)不清楚的,可以參看這篇文章。