A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王晓东 初级黑马   /  2012-6-4 11:24  /  1788 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如题:int 和 Integer 有什么区别?

6 个回复

倒序浏览
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型   封装类
boolean   Boolean
char   Character
byte   Byte
short   Short
int   Integer
long   Long
float   Float
double   Double

 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 林豪 于 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)  //可以

回复 使用道具 举报
你看视频应该都会有讲的,int 类型的数据基本数据类型,内存的分配是在栈中。Integer是引用类型的数据,内存分配是堆栈的形式,就是引用变量存在于栈中,Integer对象存在与堆中。
不过jdk5.0中添加了新特性就是数据的装箱,如:Integer obj = 10;就是将一个基础数据类型封装为一个对象类型。也可以拆箱。可以看看张老师的视频。
回复 使用道具 举报
林豪 发表于 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
回复 使用道具 举报
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
        
        }
        
}

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
比如说: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再添加进去
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马