java 中Long和Integer不得不知道的秘密
2014-12-09 23:44
337 查看
java程序猿对Long和Integer不可谓不熟,但它们的有些秘密估计好多人都是不知道的,我们先从一个例子开始
上面例子的运行结果正如代码注释,是不是有(xiao)点(xiao)惊(zi)呆(lian)了(xia),最后一个结果应该大家都能接受,前面看着是不是有点意料之外的意思,这就是今天我要告诉大家的小秘密。
上面这个问题是由于jdk 中Long缓存了-128~127之间的值,不多说了,上源码:
以上代码都是jdk源码,从源码中我们可以看到-128~127之间的数是被缓存在数组中的,所以每次取这个区间的数时返回的是同一个对象,不在这个区间的数每次获取时返回的都是一个新对象,所以上面的结果就能理解了吧。还有一点需要解释下Long a = 12L和Long a = Long.valueOf(12)是等价的。
如果在Integer中遇到类似问题,同上解。
以上小小点心供各位客官品尝,不到之处望不吝赐教!
上面例子的运行结果正如代码注释,是不是有(xiao)点(xiao)惊(zi)呆(lian)了(xia),最后一个结果应该大家都能接受,前面看着是不是有点意料之外的意思,这就是今天我要告诉大家的小秘密。
上面这个问题是由于jdk 中Long缓存了-128~127之间的值,不多说了,上源码:
以上代码都是jdk源码,从源码中我们可以看到-128~127之间的数是被缓存在数组中的,所以每次取这个区间的数时返回的是同一个对象,不在这个区间的数每次获取时返回的都是一个新对象,所以上面的结果就能理解了吧。还有一点需要解释下Long a = 12L和Long a = Long.valueOf(12)是等价的。
如果在Integer中遇到类似问题,同上解。
以上小小点心供各位客官品尝,不到之处望不吝赐教!
相关文章推荐
- Expected: class java.lang.Long, got class java.lang.Integer异常处理
- java 类型转换 Long double String Integer
- hibernate java.lang.Long cannot be cast to java.lang.Integer
- java.lang.Integer cannot be cast to java.lang.Long异常处理
- java中String,int,Integer,char,Long,Float,Double,Date 类型转换
- java中数据类型转换 Integer String Long Float Double Date
- java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
- java.lang.Long cannot be cast to java.lang.Integer
- 报错:java.lang.Long cannot be cast to java.lang.Integer
- java.lang.Integer can not be cast to java.lang.Long
- java中数据类型转换 Integer String Long Float Double Date Char
- hibernate :java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
- hibernate :java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
- java基础之Integer和Long对象相等比较
- The Atomic classes in Java 5: AtomicInteger and AtomicLong,AtomicReference etc.
- java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
- java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
- ssh框架中 hibernate 的bean中 的java.math.BigDecimal 要改成 integer 或者 long
- java类型转换 Integer String Long Float Double Date
- 报错:java.lang.Long cannot be cast to java.lang.Integer