我們知道integer的最大值是 2^31 - 1,long最大值是 2^63 -1
不管是32位機還是64位機都是這樣
通常來說我們要操作一個大于 integer最大值的數(shù)的時候會用 long來進行
但萬一我們遇到一個比 long的最大值還大的數(shù)怎么辦呢?
biginteger
這種情況還是會出現(xiàn)的,對于操作超大數(shù)的情況 java提供了 biginteger類,使用時需要實例化一個 biginteger對象,調用它的運算方法進行加減等操作。
下面舉個例子說明
操作 uuid
我們知道在android設備中經常用 anroid_id 來表示設備的唯一性
一般在安裝 app的之后第一次啟動時會調用下面的代碼來生成一個設備編號
1
|
string private_id = settings.secure.getstring(getcontext().getcontentresolver(), settings.secure.android_id); |
然后把字符串通過持久化儲存放到文件系統(tǒng)或者數(shù)據(jù)庫中,日活等指標都可以依據(jù)這個來標識。
它的值通常是個十六進制數(shù),比如
af84c9117b6c98d2
把它轉成十進制是
12647454730485537000
這已經超出了long最大值的范圍 9223372036854776000
然后我們想在原有 android_id的基礎上簡單加密一下,比如加個隨機數(shù)上去什么的
1
2
3
4
5
|
string private_id = settings.secure.getstring(getcontext().getcontentresolver(), settings.secure.android_id); biginteger androidid = new biginteger(private_id, 16 ); random random = new random(); biginteger result = androidid.add( new biginteger(string.valueof(random.nextint( 10000 )), 10 )); string hex = result.tostring(); |