new Integer()与 Integer.valueOf()区别和联系
自学练习用,如有错误,还请谅解批评。
new Integer 是通过创建Integer对象来实现赋值。
valueOf 是使用Integer中的方法来实现的。
Integer x = new Integer(123);Integer y = new Integer(123);System.out.println(x == y); // false
通过创建Integer对象的方法,再使用 == 进行比较,比较的会是地址,由于是创建了2个对象,所以返回false。
这其中如果将x == y 换成equals的形式,则会返回为true,这个就涉及== 与 equals的区别了,简单来说,==比较引用类型会比较地址,equals则是比较的值,具体equals是如何比较值得就不在这篇文章过多阐述。
Integer z = Integer.valueOf(123);Integer k = Integer.valueOf(123);System.out.println(z == k); // true
而通过valueOf的形式确实true,这是为什么呢?这就需要了解一下valueOf的原理。
public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);}
这其中IntegerCache.low和IntegerCache.high已经设置-128 ~127,也就是说系统已经在缓存池里存储了-128~127的数字。
valueOf会先判断填入的数字是否存在于缓存池之中,也就是-128 ~127,如果存在则直接返回缓存池的内容,这也就是为什么valueOf的==为true,因为是直接使用缓存池中已有的数据,所以,地址也会相同。
这其中的IntegerCache.cache[i + (-IntegerCache.low)],cache是默认的数组,但我也没有理解这其中的i + (-IntegerCache.low)是什么意思,只知道是返回填入数字在缓存池中的对应的数字。
而如果填入的数字不在于缓存池之中,则会直接生成一个新的Integer对象,所以如果填入的数字超出-128~127,再进行比较就会返回false
Integer z = Integer.valueOf(128);Integer k = Integer.valueOf(128);System.out.println(z == k); //false
new Integer()与 Integer.valueOf()区别和联系相关推荐
- 你知道Integer和int的区别吗
最近小康面试,突然被面试官问道,说一下Integer和int的区别.额-可能平时就知道写一些业务代码以及看一些自己觉得比较高大上的东西,包括面试也看的一些Spring源码等,对于这种java特别基础的 ...
- Java面试题15牛客 以下关于Integer与int的区别错误的是
Java面试题15牛客 以下关于Integer与int的区别错误的是 A int是java提供的8种原始数据类型之一 B Integer是java为int提供的封装类 C int的默认值为0 D In ...
- Integer与int的区别
如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null.但是如果面试官再问一下Integer i = 1; ...
- int、Integer、new Integer和Integer.valueOf()的 ==、equals比较
Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能. Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Cha ...
- Integer 和 int 的区别
一.int 和 Integer 的区别: Integer 是 int 的包装类,int 是 java 中的基本数据类型. Integer 对象必须是实例化后才能使用,而 int 变量不需要实例化. I ...
- Integer 与 Int 的区别
Integer 类整形 与 Int 整形 的区别 最近在翻java的源码,发现了一些平常不注意,但很容易出错的东西,最近有空的话就整理出来. Integer:是一个int的包装类,Integer变量 ...
- Java基础 - Integer和int的区别
一.int和Integer的区别 两者的区别主要体现在以下几个方面: 1.数据类型不同:int 是基础数据类型,而 Integer 是包装数据类型: 2.默认值不同:int 的默认值是 0,而 Int ...
- new Integer 和 Integer.valueOf 有什么不同
2019独角兽企业重金招聘Python工程师标准>>> @Testpublic void testHashCode() throws Exception {//[1237514926 ...
- integer比较_每日一题:Integer、int 的区别
点击上方蓝色字体,选择"标星公众号"优质文章,第一时间送达来自 | chenxiangxiang链接 | cnblogs.com/cxxjohnson/p/10504840.htm ...
最新文章
- 全志 修改KEY Patch
- 阿里云自研数据库支撑双11,助力电商客户订单峰值突破每秒20万笔
- 037_自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)
- Asynchronous(异步处理-Promise)
- SpringBoot整合MyBatis并实现简单的查询功能
- 【CCCC】L3-002 特殊堆栈 (30分),nlogn维护序列中位数,STL大乱斗,有重multiset,vector+二分插入
- Python 基础课程第十一天
- Ubuntu Git安装与使用
- Linux系统维护人员的必备参考书
- java导出到txt_Java生成TXT文本并下载
- 在科学计算机中如何按正切,科学计算器算三角函数
- php输入框形式,php输入框
- springboot内存占用过高问题排查 - jvm内存使用分析
- iOS 仿微信语音输入动画
- Linux 内核签名(签名内核模块)、linux 驱动签名
- 心愿作文计算机,电脑的心愿作文
- 火了,新东方年会吐槽视频《释放自我》:累死累活干不过写PPT的
- C++迭代加深搜索及其例题讲解—————Addition Chains
- Python也可以很暖男之每日发送爱词霸每日一句+日期+农历+天气预报+各种天气指数(更新)
- 转:openCV基础图像处理