我需要生成一個獨特的長值,所以我決定用UUID:UUID.randomUUID()。getLeastSignificantBits()總是返回負值?
UUID.randomUUID().getLeastSignificantBits();
一個我注意到奇怪的是,UUID.randomUUID().getLeastSignificantBits()
總是返回負值。我很困惑。我錯過了什麼嗎?
我需要生成一個獨特的長值,所以我決定用UUID:UUID.randomUUID()。getLeastSignificantBits()總是返回負值?
UUID.randomUUID().getLeastSignificantBits();
一個我注意到奇怪的是,UUID.randomUUID().getLeastSignificantBits()
總是返回負值。我很困惑。我錯過了什麼嗎?
4版的UUID使用計劃只對隨機數依賴。該算法設置版本號(4位)以及兩個保留位。所有其他位(剩餘的122位)使用隨機或僞隨機數據源進行設置。
版4的UUID具有形式XXXXXXXXXXXX-4XXX-YXXX-XXXXXXXXXXXX其中x是任意十六進制數字,y是8之一,9,A,或B
因此的第一比特最不重要的一半總是1,使其成爲負數。
這也可能是有用的,以展示從getLeastSignificantBits()
什麼期望:
/**
* @see UUID#getLeastSignificantBits()
*/
public void test_getLeastSignificantBits() {
UUID uuid = new UUID(0, 0);
assertEquals(0, uuid.getLeastSignificantBits());
uuid = new UUID(0, Long.MIN_VALUE);
assertEquals(Long.MIN_VALUE, uuid.getLeastSignificantBits());
uuid = new UUID(0, Long.MAX_VALUE);
assertEquals(Long.MAX_VALUE, uuid.getLeastSignificantBits());
}
感謝。這對我有意義。順便說一句,關於如何產生一個獨特的長期價值的任何建議? – Kai 2014-11-04 23:59:00
@Kai這是一個單獨的問題(以及之前在此網站上提出的問題)。 – yshavit 2014-11-05 00:00:58
SecureRandom#nextLong如何? – Thilo 2014-11-05 00:02:00