new Integer 和 Integer.valueOf 有什么不同
2019独角兽企业重金招聘Python工程师标准>>>
@Testpublic void testHashCode() throws Exception {//[1237514926=acode, 1237514926=ccode, 548246552=bcode, 835648992=dcode]//可以看到 a 和 c 是同一个对象Integer a=9;Integer b=new Integer(9);Integer c=Integer.valueOf(9);Integer d=new Integer("9");int acode=System.identityHashCode(a);int bcode=System.identityHashCode(b);int ccode=System.identityHashCode(c);int dcode=System.identityHashCode(d);List<String> codeList=new ArrayList<>();codeList.add(acode+"=acode");codeList.add(bcode+"=bcode");codeList.add(ccode+"=ccode");codeList.add(dcode+"=dcode");Collections.sort(codeList);System.out.println(codeList);//[1134517053=acode, 1368884364=ccode, 401625763=dcode, 492228202=bcode]//如果值换为了128, 结果 a 和 c 就变成了不同对象, 这是因为 Integer 的实现原理, /*** 使用 new(int x) 创建对象的时候, 如下, 会创建新对象:* public Integer(int value) {* this.value = value;* }* * Integer.valueOf(int x) 方法源码如下, 如果 x 在 IntegerCache.low 和 IntegerCache.high * (-128~127)之间,会直接从 IntegerCache.cache[] 数组里面取, 也就是说是基本类型数值 x=9 ,而* 下面的128超出了这个范围,会调用构造器创建新对象 :* public static Integer valueOf(int i) {* if (i >= IntegerCache.low && i <= IntegerCache.high)* return IntegerCache.cache[i + (-IntegerCache.low)];* return new Integer(i);* }*/a = 128;b = new Integer(128);c = Integer.valueOf(128);d = new Integer("128");acode = System.identityHashCode(a);bcode = System.identityHashCode(b);ccode = System.identityHashCode(c);dcode = System.identityHashCode(d);codeList = new ArrayList<>();codeList.add(acode + "=acode");codeList.add(bcode + "=bcode");codeList.add(ccode + "=ccode");codeList.add(dcode + "=dcode");Collections.sort(codeList);System.out.println(codeList);}
转载于:https://my.oschina.net/wliming/blog/1512257
new Integer 和 Integer.valueOf 有什么不同相关推荐
- int、Integer、new Integer和Integer.valueOf()的 ==、equals比较
Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能. Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Cha ...
- new Integer()与 Integer.valueOf()区别和联系
自学练习用,如有错误,还请谅解批评. new Integer 是通过创建Integer对象来实现赋值. valueOf 是使用Integer中的方法来实现的. Integer x = new Inte ...
- Integer和Integer比较以及Integer和Int的比较分析
发现做项目的过程中,在数值类型的比较上容易犯错,特别是Integer和Integer的比较,Integer和int的比较.虽然这些都是些基础语法,但稍不留意就容易犯错,在实际开发过程中如果出现这类失误 ...
- (Integer) 128 == (Integer) 128 为false详细解读
所学知识 这里涉及到的知识点为Java的自动装箱.拆箱问题 先看简单示例: 第一组输出为true,第二组false,第三组false.第二组false很正常因为Integer对象地址不同,但为什么第一 ...
- Java的Integer和Integer比较相等
Integer是包装类(引用数据类型),int是基本数据类型, Integer a=12; Integer b=12; //a==b为true: Integer c=1200; Integer d=1 ...
- Integer i1 = 10;和Integer = new Integer(10);的区别
首先我们要明白Integer是引用数据类型,是包装类(封装类) 1.5版本之后,存在自动拆装包.他是int类型对应的封装类. Integer是直接继承于Number类间接继承于Object类 ,实现了 ...
- oracle中integer最大值,integer表示的最大整数
Integer类型的变量可能存在的最大整数为? A.256 BInteger类的数据范围为,最小值为 -2^31,最大值为 2^31-1: 验证如下, 创建java类TestInteger,做测试验证 ...
- Java中Integer.MAX_VALUE/Integer.MIN_VALUE的含义
leetcode209中有写到 int result = Integer.MAX_VALUE,填补一下知识盲区. integer.MAX_VALUE的含义 首先,回忆一下Java中基本数据类型有哪些: ...
- c语言里integer用法,integer constant
允许直接在表达式中使用整数类型的值. 句法 整型常量是表单的非左值表达式. decimal-constant integer-suffix(optional)(1)octal-constant int ...
最新文章
- PL/SQL程序设计 第七章 包的创建和应用
- Java设计模式(工厂模式>抽象工厂模式和原型模式)
- 多线程-多图下载综合案例-SDWebImage框架实现代码
- python做软件-用python做个翻译小软件吧~
- 【网址收藏】Ubuntu使用OBS录制桌面时黑屏怎么办?
- FreeRTOS任务通知
- KEIL4.12中添加ULINK2的支持
- debian 安装java_debian9安装jdk1.8
- IaaS, PaaS和SaaS公司都做些什么
- Css学习总结(5)——CSS常见布局方式
- 小程序mpvue图片绘制水印_基于mpvue小程序使用echarts画折线图的方法示例
- Autofs自动挂在实现
- python动态属性_Python进阶之@property动态属性的实现
- python_sorted()详解
- 最大子段和问题(3种方法)
- Pale Moon 15.1 发布,苍月浏览器
- ESP32基于arduino开发的心跳体温检测系统(二)传感器的使用
- js闭包的理解及应用场景
- tomcat 运行提示The background cache eviction process was unable to free
- 脑裂的产生与解决方案