黑马程序员技术交流社区

标题: int 和 Integer 有什么区别 [打印本页]

作者: 王晓东    时间: 2012-6-4 11:24
标题: int 和 Integer 有什么区别
如题:int 和 Integer 有什么区别?
作者: 张少威    时间: 2012-6-4 11:26
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型   封装类
boolean   Boolean
char   Character
byte   Byte
short   Short
int   Integer
long   Long
float   Float
double   Double

 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
作者: 林豪    时间: 2012-6-4 11:27
本帖最后由 林豪 于 2012-6-4 11:29 编辑

当需要往ArrayList,HashMap中放东西时,像int,double这种内建类型是放不进去的,因为容器都是装 object的,这是就需要这些内建类型的外覆类了。
  Java中每种内建类型都有相应的外覆类。
  Java中int和Integer关系是比较微妙的。关系如下:
  1.int是基本的数据类型;
  2.Integer是int的封装类;
  3.int和Integer都可以表示某一个数值;
  4.int和Integer不能够互用,因为他们两种不同的数据类型;
  举例说明
  ArrayList al=new ArrayList();
  int n=40;
  Integer nI=new Integer(n);
  al.add(n);//不可以
       al.add(nI)  //可以


作者: 何拴绪    时间: 2012-6-4 11:30
你看视频应该都会有讲的,int 类型的数据基本数据类型,内存的分配是在栈中。Integer是引用类型的数据,内存分配是堆栈的形式,就是引用变量存在于栈中,Integer对象存在与堆中。
不过jdk5.0中添加了新特性就是数据的装箱,如:Integer obj = 10;就是将一个基础数据类型封装为一个对象类型。也可以拆箱。可以看看张老师的视频。
作者: 张少威    时间: 2012-6-4 11:34
林豪 发表于 2012-6-4 11:27
当需要往ArrayList,HashMap中放东西时,像int,double这种内建类型是放不进去的,因为容器都是装 object的 ...

ArrayList al=new ArrayList();
  int n=40;
  Integer nI=new Integer(n);
  al.add(n);//不可以
       al.add(nI)  //可以

al.add(n);//不可以
这个在JDK5之前应该是不可以的,JDK5之后是可以的。
JDK5的一个新特性,自动装箱与拆箱,可在需要的时候自动将Integer转换为int,或才将int转换为Integer
作者: 胡团乐    时间: 2012-6-4 12:04
int 是基本类型 Integer是它的封装类还有
byte Byte
short Short
char Character
float Float
double Double
long Long  这是1.5出现的新特性
对于int 和 Integer 的自动装箱问题 看个代码示例:
public class AutoBox {

        public static void main(String[] args) {
//                对于自动装箱和拆箱 -128-127 范围内数字(一个字节) 会存起来(内存池) 在此取出会是同一个对象
//                超过一个字节 则不会
                Integer obj=4;// 自动装箱 int型赋给Integer 1.4版本不支持装箱 4是基本类型int类型
                System.out.println(obj + 3); // 自动拆箱 Integer 自动转为int   1.4不支持拆箱
               
                Integer in1=13;
                Integer in2=13;
                System.out.println(in1 == in2);//true;
               
                Integer in3=137;//超过127
                Integer in4=137;
                System.out.println(in3 == in4);//false
        
        }
        
}
作者: 李春阳    时间: 2012-6-4 13:17
比如说:Integer i=1; 这里的i是一个对象 。
      而int i=1; 这个i是一个基础变量
这里相当于把基础型int封装为一个对象。
而在内存里也有区别,int i = 1这个是在栈内存里的。
                    Integer i = 1这个是在对内存里的一个对象。

其他的基础型也有对应的封装:
boolean对应Boolean
char对应Character
byte对应Byte




那么为什么要进行这样一个封装呢~
比如说:往ArrayList里面add,必须add的是Object
而如果add int型就不可以,因为不是对象。
所以只能把其封装为Integer再添加进去




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2