博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中 int 和 Integer 区别
阅读量:3942 次
发布时间:2019-05-24

本文共 2139 字,大约阅读时间需要 7 分钟。

文章目录

1.java自动拆箱和自动装箱

1,自动装箱

自动装箱其实就是将基本数据类型转换为引用数据类型(对象)

2,自动拆箱

自动拆箱其实就是将引用数据类型转化为基本数据类型

程序测试:

public static void main(String[] args) {
Integer num1 = 1; //这里就用到了自动装箱;等同于Integer a = new Integer(1); int num2 = num1 - 1; //对象不能直接进行计算,所以这里有自动拆箱的操作, // 将a对象转换成基本数据类型,然后-1 System.out.println(num1); System.out.println(num2);}

测试结果:

在这里插入图片描述

2.int和Interger的区别

1,int是基本数据类型,Integer是引用数据类型

2,int默认值是0,Integer默认值是null

3,int类型直接存储数值,Integer需要实例化对象,指向对象的地址

public static void main(String[] args) {
Integer a = new Integer(8); Integer a1 = new Integer(8); Integer b = 8; Integer b1 = 8; int c = 8; int c1 = 8; Integer d = new Integer(130); int d1 = 130; Integer e = 128; Integer e1 = 128; System.out.println(a == a1); //false System.out.println(a == b); // false //两个new出来的对象地址不一样 //new Integer() 是新建一个对象,与其他Integer的引用不同 System.out.println(b == c); // true System.out.println(b == b1); // true System.out.println(d == d1); // true //int 类型的自动封装,与 Integer 声明的变量,总是指向同一地址 //封装类和基本数据类型进行比较的时候,java会自动拆箱,然后比较数值是否相等。 System.out.println(c1 == c1); // true //都是基本数据类型的值肯定相等 System.out.println(e == e1); // false //Integer声明的变量的值在[-128,127]范围时, //地址指向相同(byte范围的数是从常量池中获取) //超过这个范围,会重新new一个,所以不相同}

结论:

  • 都是封装类,都是new出来的,肯定不相等。因为对象的内存地址不一样。
  • 都是封装类,都不是new出来的,如果值在-128~127之间,那就相等,否则不相等。Integer只在127范围内才是同地址,超出就false
  • 如果是封装类和基本类型进行比较,只要数值相等那就相等,否则就不相等。因为封装类和基本数据类型进行比较的时候会有一个自动拆箱操作。int和任意Integer都是同一地址
  • 都是基本数据类型,如果数值相等,那就相等;否则不相等。

为什么会出现结论二这种情况?

因为java在进行编译时 Integer e = 128 会被编译成 Integer.valueOf(128) ,这个可以通过反编译 class 文件看到。而通过 Integer 源码可以得出,Integer.valueOf() 方法会在数值-128~127之间会对 Integer 进行缓存,不会再重新 new 一个,所以 b==b1 为 true ;当数值二大于127或者小于-128的时候则会重新 new 一个,所以 d == d1 为 false

Integer的valueOf方法如下:

在这里插入图片描述

3.补充 ==

== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针作。

1,比较的是操作符两端的操作数是否是同一个对象。

2,两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。

3,比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:

int a=10long b=10Ldouble c=10.0 都是相同的(为true),因为他们都指向地址为10的堆。

转载地址:http://shjwi.baihongyu.com/

你可能感兴趣的文章
My Love - Justin Timberlake 贾斯汀 汀布莱克
查看>>
[Spring AOP] 基于AspectJ的@AfterReturning注释示例(附参考书目)
查看>>
The Big Bang Theory歌词
查看>>
Eclipse自动注释模版
查看>>
《非诚勿扰2》台词
查看>>
《班扎古鲁白玛的沉默》仓央嘉措
查看>>
《十诫诗》仓央嘉措
查看>>
《那一世》仓央嘉措
查看>>
《我问佛》仓央嘉措
查看>>
Maven中指定得AspectJ依赖无法添加得解决方案
查看>>
Spring3注释装配的最佳实践
查看>>
Mac Vi常用键
查看>>
jchardet字符编码自动检测工具
查看>>
使用Maven Archetype生成工程报错的解决
查看>>
System.getProperty()系统参数
查看>>
Linux系统下批量删除.svn目录
查看>>
大数据行业应用趋势
查看>>
Mac + Rails3 + MongoDB的Demo工程搭建
查看>>
隐藏于Python内的设计之禅彩蛋
查看>>
VSCode配置C/C++环境
查看>>