关于int 和integer的区别?
这个问题很老,但是我问的侧重点不同。
我们知道,Int是java的原始数据类型,Integer是java为int提供的封装类。
那么请问:为什么要给int这些原始数据类型提供封装类?提供封装类的好处?
------解决方案--------------------为什么要给int这些原始数据类型提供封装类?提供封装类的好处?
如果把类人猿作为基本数据类型,能干的事情很少,那么Integer就是被包装过的人,能玩的花样很多。
int作为基本的数据类型只能进行java的+ - x / 等常用运算操作。
声明为int的变量不需要实例化,声明为Interger的变量需要实例化.
int是面向机器底层的数值类型,是Primitive类型的数据类型,而Integer是int的Warpper类,是面向对象的即OOP的对象类型。int 一般只用在数值计算中,而Integer是用在Java的其它要使用对象的地方,比如Map的Key与Value,List与Set的Element若要保存数值信息都要把int包装成Integer对象使用。
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
------解决方案--------------------我看了一本如何更有效地编写你的代码的书,里面有这样一条,让我感受很深。。
具体的例子,你可以去网上找找,大意是能用int的地方就不要用Integer,在此简单说明一下吧,比如在for循环里面,如果用Integer的话,它不断地解包装包,这样导致程序运行速度较慢。。
另外,它们还有一个根本的区别,就是int类型的值不可能为null。。
------解决方案--------------------例如,假定一个方法中有两个局部变量,一个变量为 int 原始类型,另一个变量是对一个 Integer 对象的对象引用:
int i = 5; // 原始类型
Integer j = new Integer(10); // 对象引用
这两个变量都存储在局部变量表中,并且都是在 Java 操作数堆栈中操作的,但对它们的表示却完全不同。
原始类型 int 和对象引用各占堆栈的 32 位。(要表示一个 int 或一个对象引用,Java 虚拟机实现至少需要使用 32 位存储。)Integer 对象的堆栈项并不是对象本身,而是一个对象引用。
对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
使用原始类型无须调用 new,也无须创建对象
------解决方案--------------------哥们,正式的告诉你吧,Java不是纯面向对象语言。。。
他对基本的数据类型用包装类来补助了。。。
包装类的好处,体现了面向对象思想。。。
基本类型速度快,他们存储的地方不一样的。
至于用哪个看情况吧。
有一点要说就是,在一般框架和你的实体类请尽量用包装类。
你看一下Hibernate给你自动生成的实体类就知道了。
用了包装类可以实现你的实体是纯面向对象的。在解析的时候很方便。