Java的Integer和int有什么区别
来源:互联网 发布:vscode c 函数插件 编辑:程序博客网 时间:2024/05/19 13:22
Java是面向对象的编程语言,一切都是对象,但是为了编程的方便还是引入了基本数据类型,为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换,对应如下:
原始类型:boolean,char,byte,short,int,long,float,double
包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
顺便一提,Java中的基本数据类型只有以上8个,除了基本类型(primitive type),剩下的都是引用类型(reference type)。
所以最基本的一点区别是:Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。除此之外还有区别,请看代码:
public class TestInteger { public static void main(String[] args) { int i = 128; Integer i2 = 128; Integer i3 = new Integer(128); System.out.println(i == i2); //Integer会自动拆箱为int,所以为true System.out.println(i == i3); //true,理由同上 Integer i4 = 127;//编译时被翻译成:Integer i4 = Integer.valueOf(127); Integer i5 = 127; System.out.println(i4 == i5);//true Integer i6 = 128; Integer i7 = 128; System.out.println(i6 == i7);//false Integer i8 = new Integer(127); System.out.println(i5 == i8); //false Integer i9 = new Integer(128); Integer i10 = new Integer(123); System.out.println(i9 == i10); //false }}
为什么i4和i5比是true,而i6和i7比是false呢?关键就是看valueOf()函数了,这个函数对于-128到127之间的数,会进行缓存, Integer i5 = 127时,会将127进行缓存,下次再写Integer i6 = 127时,就会直接从缓存中取,就不会new了。所以i4和i5比是true,而i6和i7比是false。
而对于后边的i5和i8,以及i9和i10,因为对象不一样,所以为false。
以上的情况总结如下:
1,无论如何,Integer与new Integer不会相等。不会经历拆箱过程,new出来的对象存放在堆,而非new的Integer常量则在常量池(在方法区),他们的内存地址不一样,所以为false。
2,两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false。因为java在编译Integer i2 = 128的时候,被翻译成:Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存。
3,两个都是new出来的,都为false。还是内存地址不一样。
4,int和Integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比。
参考自:http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html和http://blog.csdn.net/jackfrued/article/details/44921941
- Java int和Integer有什么区别
- Java的Integer和int有什么区别
- Java的Integer和int有什么区别
- Java中int和Integer有什么区别?
- Java基础之int和Integer有什么区别
- int 和 Integer 有什么区别
- 3 int 和 Integer 有什么区别
- int 和 Integer 有什么区别
- int 和 Integer 有什么区别
- int 和Integer有什么区别?
- int 和 Integer 有什么区别
- 转载-int 和 Integer 有什么区别
- int 和 Integer 有什么区别?
- int 和 Integer 有什么区别
- int 和 Integer 有什么区别?
- int和Integer有什么区别
- int 和 Integer 有什么区别
- int和Integer有什么区别?
- zoj 3869 Ace of Aces (水题)
- mac install Scrapy
- 树桩上的女人:索魂
- SpringMVC配置不拦截静态资源
- JavaScript---基本语法学习(二):数组、函数和变量作用域学习
- Java的Integer和int有什么区别
- hello wifi,I'm back!
- 使用内核模块添加系统调用
- opencv实战,钢板焊接点寻找1
- set bitmap to static control
- 彻头彻尾理解单例模式及其在多线程环境中的应用
- 硬盘写到一半时断电,文件系统里会发什么?
- 数据库常见问题整理
- 信息系统项目管理知识--项目立项管理