什么是Id

最近从别人手里接过一个功能点,table的Id(long),居然是当前时间的毫秒数值与playerId做String拼接组成的,playerId是另一个Entity的Id(long)。

在测试阶段一直都没问题,但是上线之后就出问题了。

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位数,那么,结果不言而喻!!!

 

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)

你可能感兴趣的:(java,format,long)