zoukankan      html  css  js  c++  java
  • int与Integer的区别

    回顾下这些知识点:

    Integer和int的区别

    1、Integer是int提供的封装类,而int是Java的基本数据类型;


    2、Integer默认值是null,而int默认值是0;


    3、声明为Integer的变量需要实例化,而声明为int的变量不需要实例化;


    4、Integer是对象,用一个引用指向这个对象,而int是基本类型,直接存储数值。

    java int与integer的区别

    int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别:

    int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象

    1.Java 中的数据类型分为基本数据类型和复杂数据类型

    int 是前者而integer 是后者(也就是一个类);因此在类进行初始化时int类的变量初始为0.而Integer的变量则初始化为null.

    2.初始化时:

      int i =1;Integer i= new Integer(1);(要把integer 当做一个类看);但由于有了自动装箱和拆箱  

    (http://www.cnblogs.com/shenliang123/archive/2012/04/16/2451996.html),

    java 自动装箱与拆箱
    
    这个是jdk1.5以后才引入的新的内容,
    
    java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装箱,解包装称为拆箱);
    
    其实按照我自己的理解自动装箱就可以简单的理解为将基本数据类型封装为对象类型,来符合java的面向对象;例如用int来举例:
    
    //声明一个Integer对象
    Integer num = 10;
    //以上的声明就是用到了自动的装箱:解析为
    Integer num = new Integer(10);
    以上就是一个很好的体现,因为10是属于基本数据类型的,原则上它是不能直接赋值给一个对象Integer的,但jdk1.5后你就可以进行这样的声明,这就是自动装箱的魅力
    自动将基本数据类型转化为对应的封装类型。成为一个对象以后就可以调用对象所声明的所有的方法
    
    自动拆箱:故名思议就是将对象重新转化为基本数据类型:
    
    //装箱
    Integer num = 10;
    //拆箱
    int num1 = num;
    自动拆箱有个很典型的用法就是在进行运算的时候:因为对象时不恩直接进行运算的,而是要转化为基本数据类型后才能进行加减乘除
    
    Integer num = 10;
    //进行计算时隐含的有自动拆箱
    System.out.print(num--);
    哈哈 应该感觉很简单吧,下面我再来讲点稍微难点的,是稍微
    看下面一个例子,在看下面一个例子时如果对于 == 与 equal的区别不清楚的,可以先看http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452156.html
    
    //在-128~127 之外的数
             Integer num1 = 297;   Integer num2 = 297;           
             System.out.println("num1==num2: "+(num1==num2));                    
             // 在-128~127 之内的数 
             Integer num3 = 97;   Integer num4 = 97;   
             System.out.println("num3==num4: "+(num3==num4)); 
    打印的结果是:num1==num2: false    num3==num4: true 
    
    很奇怪吧:这就归结于java对于Integer与int的自动装箱与拆箱的设计,是一种模式:叫享元模式(flyweight)
    
    为了加大对简单数字的重利用,java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象
    
    而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象;明白了吧
    
    以上的现象是由于使用了自动装箱所引起的,如果你没有使用自动装箱,而是跟一般类一样,用new来进行实例化,就会每次new就都一个新的对象;
    
    这个的自动装箱拆箱不仅在基本数据类型中有应用,在String类中也有应用,比如我们经常声明一个String对象时:
    
    String str = "sl";
    //代替下面的声明方式
    String str = new String("sl");
    

      

      使得对Integer类也可使用:Integer i= 1;       

      int 是基本数据类型(面向过程留下的痕迹,不过是对java的有益补充),Integer 是一个类,是int的扩展,定义了很多的转换方法

      类似的还有:float Float;double Double;string String等,而且还提供了处理 int 类型时非常有用的其他一些常量和方法

      举个例子:当需要往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: 如:List<Integer> list = new ArrayList<Integer>();可以  而List<int> list = new ArrayList<int>();则不行

    总而言之:如果我们定义一个int类型的数,只是用来进行一些加减乘除的运算or作为参数进行传递,那么就可以直接声明为int基本数据类型,但如果要像

    对象一样来进行处理那么就要用Integer来声明一个对象,因为java是面向对象的语言,因此当声明为对象时能够提供很多对象间转换的方式,与一些常用

    的方法。自认为java作为一们面向对象的语言,我们在声明一个变量时最好声明为对象格式,这样更有利于你对面向对象的理解。

  • 相关阅读:
    c++ mvc timer的应用
    table 在网页无法顶到头部问题
    vs2008 C++ 没有找到MSVCR90D.dll 问题
    FrametSet中各frame,iframe之间dom的访问
    关于VC中的Timer
    Vc2008中如何为视图类添加消息响应
    C++ map在MFC中的应用
    解决iframe 右边有空白的问题
    poj1125 Stockbroker Grapevine *
    poj1062 昂贵的聘礼 **
  • 原文地址:https://www.cnblogs.com/fengli9998/p/7859312.html
Copyright © 2011-2022 走看看