int和Integer之间的区别和联系

      在工作中使用==埋下的坑这篇博文中,我们看到当使用基本类型的时候==是完全没有问题的,部分或者混合使用基本类型和装箱基本类型的时候,就可能出现问题了,那么我们可能会想基本类型和装箱基本类型有什么区别和联系哪?下面以int和Integer为例讲讲我的看法。int和Integer非常的像,所有的基本类型和其对应的装箱基本类型都非常的像,但是他们之间也是有区别的,他们之间的区别是什么哪?

为了明白他们之间的区别和联系,我们一起看看下面这段简单的代码和罗织在代码之间的结论吧!

1:TestIntMain.java——包含基本类型和装箱基本类型的区别和联系的结论注释

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

public class TestIntMain {
    public static void main(String [] args){

        /**
         * 区别1:
         * int 声明的变量不能直接赋值为null
         * Integer 声明的变量能直接赋值为null
         */
//        int _int_ = null;//不能直接赋null
        Integer _Integer_ = null;//可以直接赋null

        /**
         * 区别2:
         * int 声明的变量,存储就是一个数值,不能调用方法,它也没有方法可调用
         * Integer 声明的变量,是一个对象,它有对应的变量、方法,它可以自由的调用
         */
        int _int = 99;
        Integer _Integer1 = new Integer(99);
        //一个整数值,不能调用方法
//        System.out.println("_int type is : "+_int.getClass().getSimpleName()+"_int value is : "+_int.toString());
        System.out.println("_int  value is : "+_int);

        //一个对象,可以调用它的方法,属性等等
        System.out.println("_Integer1 type is : "+_Integer1.getClass().getName()+"   _Integer1 value is : "+_Integer1);

        /**
         * 自动装箱和拆箱
         * 自动装箱:我的理解是将基本类型的变量,自动转换为装箱基本类型的对象的过程
         * 自动拆箱:我的理解是将装箱基本类型的对象,自动转换为基本类型的变量的过程
         * 1:这是在Java1.5发行版本中增加的功能
         * 2:目的是为了模糊基本类型和装箱基本类型之间的区别,减少使用装箱基本类型的繁琐性
         * 3:这样做也有一定的风险,比如:对于装箱基本类型运用==操作符几乎总是错误的,装箱的操作会导致高的开销和不必要的对象创建
         */
        int _int1 = new Integer(99);//对应的匿名对象变成了一个整数值,自动拆箱
        int _int2 = _Integer1;//_Integer1对象变成了一个整数值,自动拆箱
        //        System.out.println("_int1 type is : "+_int1.getClass().getSimpleName()+"_int1 value is : "+_int1.toString());
        System.out.println("_int1 value is : "+_int1);

        Integer _Integer = 99;//对应的整数值,直接给你对象也没问题,自动装箱
        System.out.println("_Integer  type is : "+_Integer.getClass().getName()+"   _Integer  value is : "+_Integer);

//        List<int> list_ = new ArrayList<int>();
        List<Integer> list = new ArrayList<Integer>();
        list.add(_int);//_int 此时相当于是一个Integer类型的对象了,自动装箱
        list.add(_Integer);
    }
}

1:TestIntMain.class——包含基本类型和装箱基本类型的自动装箱和拆箱的实现方式

import java.util.ArrayList;

public class TestIntMain {
    public TestIntMain() {
    }

    public static void main(String[] args) {
        Object _Integer_ = null;//Integer _Integer_ = null; 编译后是这样的哦
        byte _int = 99;//int _int = 99; 编译后是这样的哦
        Integer _Integer1 = new Integer(99);
        System.out.println("_int  value is : " + _int);
        System.out.println("_Integer1 type is : " + _Integer1.getClass().getName() + "   _Integer1 value is : " + _Integer1);
        int _int1 = (new Integer(99)).intValue();//自动拆箱的实现方式
        int _int2 = _Integer1.intValue();//自动拆箱的实现方式
        System.out.println("_int1 value is : " + _int1);
        Integer _Integer = Integer.valueOf(99);//自动装箱的实现方式
        System.out.println("_Integer  type is : " + _Integer.getClass().getName() + "   _Integer  value is : " + _Integer);
        ArrayList list = new ArrayList();
        list.add(Integer.valueOf(_int));//自动装箱的实现方式
        list.add(_Integer);
    }
}
时间: 2024-11-03 05:41:39

int和Integer之间的区别和联系的相关文章

int和Integer有什么区别?

可参考:http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html 从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换 Integer和int比都会自动拆箱(jdk1.5以上).拆箱--->从Integer转为int;装箱指的是从int-->Integer Integer i5 = 127;//java在编译的时候,被翻译成-> Integer i5 = Integer.valueOf(127);

Java Int和Integer有什么区别?

Int int是我们常说的整型数字,是Java的8个原始数据类型(Primitive Type:boolean.byte.short.char.int.float.double.long)之一.Java语言虽然号称一切都是对象,但原始数据是例外. Integer Integer是int对应的包装类,它有一个int类型的字段存储数据,并且提供了基本操作,比如数学运算,int和字符串之间转换等.在Java5中引入了自动装箱和自动拆箱功能,Java可以根据上下文,自动进行转换,极大的简化了相关编程.

《Java架构筑基》从Java基础讲起——Int和Integer深入分析

1.关于int和Integer的问题区别分析 编译阶段.运行时,自动装箱 / 自动拆箱是发生在什么阶段? 使用静态工厂方法 valueOf 会使用到缓存机制,那么自动装箱的时候,缓存机制起作用吗? 为什么我们需要原始数据类型,Java 的对象似乎也很高效,应用中具体会产生哪些差异? 阅读过 Integer 源码吗?分析下类或某些方法的设计要点? int和Integer的区别 1.Integer是int的包装类,int则是java的一种基本数据类型 2.Integer变量必须实例化后才能使用,而i

java基础巩固系列(二):Integer与int之间的区别

在JDK1.5之后引入了自动装箱(autoboxing)与自动拆箱(unboxing),这让很多对java的初学者感到很疑惑,我刚才也是其中一员. 首先,有一些基本的概念需要了解: 1.Ingeter是int的包装类,int的初值为0,Ingeter的初值为null. 2.Integer是一个类,用Integer声明一个变量是一个对象类型(或者说引用类型):int是基本类型,用int声明的变量是非对象类型,即不能在其上调用方法. 3."=="作用于对象上的时候,其比较的是对象的引用本身

java int和Integer的区别

今天偶然和同学讨论到int和Integer的区别是,发现自己对这个问题了解的并不是很清楚,而且有些概念还是错的,所以在这对int和Integer的区别做一个总结. int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是基本数据类型 而integer 是复杂数据类型(也就是一个类):因此在类进行初始化时int类的变量初始为0.而

java面试题之int和Integer的区别

int和Integer的区别 1.Integer是int的包装类,int则是java的一种基本数据类型 2.Integer变量必须实例化后才能使用,而int变量不需要 3.Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象:而int则是直接存储数据值 4.Integer的默认值是null,int的默认值是0 延伸: 关于Integer和int的比较 1.由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变

int 与 Integer 的区别

int和Integer的区别 Integer是int的包装类,int则是java的一种基本数据类型 Integer变量必须实例化后才能使用,而int变量不需要 Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象:而int则是直接存储数据值 Integer的默认值是null,int的默认值是0 延伸 由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址

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 当做一个类看):但由于有了自动装

int与integer的区别

Ingeter是int的包装类,int的初值为0,Ingeter的初值为null. int 是基本数据类型Integer是其包装类,注意是一个类.基本类型存储在栈中,而基本类型包装类存储在堆中.为什么要提供包装类呢???一是为了在各种类型间转化,通过各种方法的调用.否则 你无法直接通过变量转化.比如,现在int要转为Stringint a=0;String result=Integer.toString(a);在java中包装类,比较多的用途是用在于各种数据类型的转化中.我写几个demo //通