黑马程序员技术交流社区

标题: 解释一下int和Integer有什么区别? [打印本页]

作者: 吴在兴    时间: 2013-1-29 23:37
标题: 解释一下int和Integer有什么区别?
解释一下int和Integer有什么区别?
作者: 冷延冰    时间: 2013-1-30 00:11
Int 是原始数据类型,Integer是为int 提供的封装类,属于引用数据类型。Java 为每个原始类型提供了封装类。
原始类 型封装类
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
作者: 王溢君    时间: 2013-1-30 00:12
int 是基本类型,直接存数值    integer是对象,用一个引用指向这个对象  
1.Java 中的数据类型分为基本数据类型和复杂数据类型   int 是前者>>integer 是后者(也就是一个类)  
2.初始化时>>   int i =1;   Integer i= new Integer(1);
(要把integer 当做一个类看)   int 是基本数据类型(面向过程留下的痕迹,不过是对java的有益补充)   
Integer 是一个类,是int的扩展,定义了很多的转换方法   
类似的还有:float Float;double Double;string String等
  举个例子:当需要往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);

另外,jdk新版本有自动装箱和拆箱功能了。
作者: 王溢君    时间: 2013-1-30 00:16
int是原始数据类型,而Integer是引用数据类型,是int的包装类。Java中的八种原始数据类型都有对应的包装类,boolean--Boolean  char--Character  byte--Byte  short--Short  long--Long  float--Float  double--Double。int和Integer是可以相互转换的如:
int a = 1; Integer in = new Integer(a);
Integer in = new Integer(10); int i = in.intValue();
JDK5.0支持自动包装和自动解包,以下代码与以上完成相同的功能:
int a = 1; Integer b = a;
Integer c= new Integer(10); int d = c;
作者: 何家旺    时间: 2013-1-30 00:19
本帖最后由 何家旺 于 2013-1-30 00:21 编辑

int是基本数据类型,直接存数值Integer是类类型用一个引用指向这个对象
举个例子:当需要往ArrayList,HashMap中放东西时,像int,double这种内建类型是放不进去的,因为容器都是装object的,这是就需要这些内建类型的外覆类了。
Java中每种内建类型都有相应的外覆类。


作者: 钱志新    时间: 2013-1-30 10:08
Integer 是个类,类就有具体的对象,在Integer对象中就包装了基本类型int的值。在Integer类型的对象中就包含一个所有属于int类型的字段。例如:构造Integer对象,将其值指定为int的某个数值:Integer(int value)。
作者: 杨杨    时间: 2013-1-30 10:33
楼上解释的很全啊int 基本类型好像不是继承object类吧止于是不是求解释
作者: 张敬培    时间: 2013-1-30 11:28
在java中数据分为两种大的类型:一种是基本数据类型,一种是引用数据类型
基本数据类型包括:byte,short,int,long,float,double,char,boolean;这八中,通常称作八中基本数据类型
引用数据类型:类、接口类型、数组类型、枚举类型、注解类型等都属于引用类型

基本数据类型和引用数据类型的区别在于存储方式上:
基本数据类型是直接在栈内存中开辟一块空间,并把内容直接保存在栈中
引用数据类型:在创建时为引用在栈中分配一块空间,具体的内容都存储在堆内存中,把引用指向堆中对象的的地址

关于楼主的问题:int和Integer的区别
1、int是基本数据类型,Integer是引用数据类型
2、在java中为了方便基本数据类型和引用数据类型之间的转换,专门为基本数据类型定义了八个引用数据类型,使其便于转换
int---Integer, char---Character, byte---Byte,short---Short, long---Long,float---Float,double---Double,boolean---Boolean,
同时规定了在这八种基本数据类型和引用数据类型之间可以自动转换,这也是java中自动装箱和拆箱的原理
作者: 宋朋山    时间: 2013-1-30 11:50
杨杨 发表于 2013-1-30 10:33
楼上解释的很全啊int 基本类型好像不是继承object类吧止于是不是求解释

object是所有类的超类    int不属于类,属于基本类型。当然不用继承了,都是直接参与运算的

从另外一个角度,所有的类都需要在对内建立对象。他们需要被一些规则所约束,而object包含这些规则。所以在堆中开辟空间的对象都需要继承object 。而int是直接放到栈中的不需要基层object

这是我的理解,希望对你有用。
作者: 孔斌    时间: 2013-1-30 13:20
首先,应该明确int 是基本类型,初始化时是分配到栈内存,直接存数值
Integer是int的封装类,用一个引用指向这个对象,分配到堆内存。
其次,为什么要用Integer而不是直接用int
原因:1、在后面的应用中,如泛型中参数、集合中添加对象....很多方法参数就只接收对象类型(Object)
         2、现在已经提供了自动拆箱和装箱,这样就能够极大的提高程序开发的灵活性
最后:他们之间相互联系又相互区别
1、int和Integer都可以表示某一个数值
2、int是基本数据类型,Integer是引用数据类型

作者: 黑马张旭    时间: 2013-1-30 16:41
我来举个实际的例子吧  比如张老师的项目里  银行这个项目里面

对于NumberManager这个类


package cn.itcast.bankqueue;

import java.util.ArrayList;
import java.util.List;

public class NumberManager {
    private int lastNumber = 0;
    private List queueNumbers = new ArrayList();
   
    public synchronized Integer generateNewNumber(){
        queueNumbers.add(++lastNumber);
        return lastNumber;
    }
   
    public synchronized Integer fetchNumber(){
        if(queueNumbers.size()>0){
            return (Integer)queueNumbers.remove(0);
        }else{
            return null;
        }
    }
}

这里面的2个方法 一个死 排号的方法  generateNewNumber()  另外一个 fetchNumber() 取号的方法
的返回值都用的  Integer 因为     不过不这样设计 对应的  ServiceWindow这个类的
Integer serviceNumber = NumberMachine.getInstance().getExpressManager().fetchNumber();  去调这个方法如果用 int
的话  serviceNumber要是null的话   上面的方法就会空指针异常  所以为了避免 尽量用 包装类来做方法返回值





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