//首先我们看一下代码
Integer a1=new Integer(10);
Integer a2=new Integer(10);
Integer a3=10;
int a4=10;
Integer a5=10;
Integer a6=1232;
Integer a7=1232;
System.out.println("a1==a2:"+(a1==a2));//false
分析:a1和a2明显是两个对象,对象之间比较;equals或者intValue();进行对比
System.out.println("a2==a3:"+(a2==a3));//false
分析:a2和a3分别是两个对象,同上
System.out.println("a2==a4:"+(a2==a4));//true
分析:a2是单独的一个对象,a4是一个数值类型,在发生运算时,a2自动拆箱为int,
转换成数值类型,进行对比
补充:
装箱拆箱是jdk1.5之后的新的特性
Integer a3=10 装箱 底层执行的是Integer a3=Integer.valueOf(10);
int a4=a3 拆箱 底层执行的是a3.intValue();
System.out.println("a1==a2:"+(a5==a3));//true
分析:
也是对象比较,Integer的取值范围-128~127
a5和a3的值是在这个区间范围之内,结果就是true
因为由IntegerCache.cache(是个Integer类型的数组)中查找
IntegerCache类专门负责Integer缓存的
System.out.println("a1==a2:"+(a6==a7));//false
分析:也是对象比较,超出缓存范围 new Integer(1232),故false
源码结论:
1:i>=128 || i<-128 =====>>new Integer (i)
2:i<128 && i>=-128 =====>>small_values[i+128]
本章节总结:
1:Integer是int的包装类,int初始值为0,Integer 初始值为null
2:无论值是否相同,Integer和new Integer(i) 都不相同
3:两个都是非new出来的Integer,如果数值在-128~127之间,则为true
否则为false
4:两个new出来的,无论值是否相同,引用地址则不通,则为false
5:int和Integer比,值相同为true,否则false,
无论Integer是new出来的还是
在-128~127范围之外的,因为Integer会自动拆箱为int在比较
Integer你真的了解吗,快来瞅瞅吧
原创
©著作权归作者所有:来自51CTO博客作者liu_dudu的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
瞅瞅面试题系列2
前面瞅瞅面试题系列开篇也简单提了一个
瞅瞅面试题 Math 数组 位运算 -
来瞅一瞅Spring Boot的多种漏洞!
本文是 Spring Boot 相关漏洞的学习资源
github 漏洞分析 二维码 -
你站在街上歪头瞅摄像机,我在 100 年后隔着屏幕瞅你
给不了你真实,只能给你一种真实的可能性。
人工智能 光流 光流法 -
Linux命令su 和sudo的区别?不知道的瞅瞅.
被问Linux命令su 和sudo的区别?
ubuntu 环境变量 当前用户 -
编程实用工具大全(前后端皆可用,不来瞅瞅?)
字符串格式化13.数据库大全个人主页:...
java python 数据结构 数据库开发 http -
【一个让你停不下来的动效】——难道不来瞅瞅?(含源码+思路)
一个停不下来的动效!!!首先看静态的东西,我们可以把
css 前端 html javascript 滑块 -
Mac android studio 启动弹窗 The use of Java options environment variables de
在使用Android Studio的过程中所遇到的一些坑:此篇不定时更新。1、Error:Execution failed for task ‘:app:processDebugManifest’.> Manifest merger failed with multiple errors, see logs: 此问题出现的情况是:主项目引入另一个项目作为主项目的library。网上有方法是:
android studio android jar Android