Java中Integer值比较不注意的问题
来源:互联网 发布:兄弟连php怎么样 编辑:程序博客网 时间:2024/05/21 11:34
public static void main(String[] args) { Integer a1 = Integer.valueOf(60); //danielinbiti Integer b1 = 60; System.out.println("1:="+(a1 == b1)); Integer a2 = 60; Integer b2 = 60; System.out.println("2:="+(a2 == b2)); Integer a3 = new Integer(60); Integer b3 = 60; System.out.println("3:="+(a3 == b3)); Integer a4 = 129; Integer b4 = 129; System.out.println("4:="+(a4 == b4)); }
这段代码的比较结果,如果没有执行不知道各位心中的答案都是什么。
要知道这个答案,就涉及到Java缓冲区和堆的问题。
java中Integer类型对于-128-127之间的数是缓冲区取的,所以用等号比较是一致的。但对于不在这区间的数字是在堆中new出来的。所以地址空间不一样,也就不相等。
Integer b3=60,这是一个装箱过程也就是Integer b3=Integer.valueOf(60)
所以,以后碰到Integer比较值是否相等需要用intValue()
对于Double没有缓冲区。
答案
1:=true
2:=true
3:=false
4:=false
对于Integer 在-128至127之间的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,
但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。
备注:转载至danielinbiti专栏
0 0
- java中Integer值比较不注意的问题
- java中Integer值比较不注意的问题
- java中Integer值比较不注意的问题
- Java中Integer值比较不注意的问题
- java中Integer值比较不注意的问题
- java中Integer的比较的问题
- java中Integer的比较
- JAVA Integer值比较问题
- Java中int和Integer比较问题
- Integer值比较的问题
- JAVA Integer 比较问题
- java Integer的值比较
- Java中不注意出现的java.lang.NullPointerException
- java中同为Integer的比较
- java中int和integer比较,integer和integer比较
- java中Integer数值比较
- Java 包装类Integer的值比较
- Integer的比较的问题
- github 下载代码编译不过 apply plugin: 'com.github.dcendents.android-maven'
- 关于LTE终端的所谓的五模、七模、十频、十一频
- altium designer 常用快捷键小结
- JavaScript正则表达式
- 单例iOS
- Java中Integer值比较不注意的问题
- CSS常见兼容问题解决方案(持续更新)
- Java程序组装树形List
- Linux上vi(vim)编辑器使用教程
- 四、HTTP控制器
- 科学技术法-正则表达式-QT
- Android获取本应用内存占用的方法
- 一个完整的easyui 增删改查界面
- 追求稳定会死得很惨