最近從別人手裡接過一個功能點,table的Id(long),居然是當前時間的毫秒數值與playerId做String拼接組成的,playerId是另一個Entity的Id(long)。
在測試階段一直都沒問題,但是上線之後就出問題瞭。
Java代碼
String newId = String.valueOf(playerId)+String.valueOf(System.currentTimeMillis());
日期的long值+playerId之後,存儲類型為string。
上面的string值,在Long.parseLong(value)的時候,出現瞭NumberFormatException。
那麼,現在,我們來看看原因到底是為何。
long的取值范圍為(-9223372036854774808~9223372036854774807),占用8個字節(-2的63次方到2的63次方-1)。
當前時間的毫秒數值:1316223521431;
已經很長瞭一旦playerId達到7位數,那麼,結果不言而喻!!!
Java代碼
Exception in thread "main" java.lang.NumberFormatException: For input string: "25430051316162482222"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Long.parseLong(Long.java:422)
at java.lang.Long.parseLong(Long.java:468)
at org.test.core.AppMain.main(AppMain.java:88)
作者“song020cn”