zoukankan      html  css  js  c++  java
  • 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);
        }
    }

     2: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);
        }
    }

     3:参考

    http://mindprod.com/jgloss/intvsinteger.html

    http://www.careerride.com/Java-QA-integer-vs-int.aspx

    https://www.quora.com/What-is-the-difference-between-an-integer-and-int-in-Java

  • 相关阅读:
    bzoj4195 [Noi2015]程序自动分析
    bzoj4236 JOIOJI hash 模拟
    bzoj1012 [JSOI2008]最大数maxnumber
    day 4 名片管理系统 -函数版
    day 3 局部变量 全局变量
    day 2 函数的嵌套
    day1 函数 (独立功能代码块)
    day 14 元组
    day 13 字典dict 操作
    day 12 列表字典 补充
  • 原文地址:https://www.cnblogs.com/godtrue/p/6413066.html
Copyright © 2011-2022 走看看