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

    int和Integer的区别

    int和Integer的基本区别

    1. int是基本数据类型,Integer是int包装类。
    2. Integer变量必须实例化后才能使用,int可以直接使用
    3. Integer的默认值是null,int默认值是0
    4. Integer变量实际上是对象的引用,指向new的Integer对象,int是直接存储数据

    Integer的自动装箱

    一般我们生成对象都是Object o = new Objectz(),但是对于Integer,我们可以Integer a = 10;
    因为Integer的自动装箱功能。
    通过反编译工具我们可以看到class文件下是
    Integer a = Integer.valueOf(10);
    这就是基本数据类型的装箱。

    Integer的自动拆箱

    int b = a;反编译生成的class文件是int b = a.intVlaue();

    深入对比

            Integer a = new Integer(10);
            Integer b = new Integer(10);
            System.out.println(a == b);
            System.out.println(a.equals(b));
    

    结果前false,后true。
    因为Integer变量是对Integer对象的引用,new了两个对象,显然内存地址不一样,引用不一样。
    而Integer重写了equals方法,数值一样就返回true。

        public static void main(String[] args) {
            Integer a = 10;
            Integer b = 10;
            System.out.println(a == b);
            Integer c = 128;
            Integer d = 128;
            System.out.println(c == d);
        }
    

    结果前true,后false
    因为Integer自动装箱时对数值在-128到127的对象放入缓存中,第二次就直接取缓存中的数据而不会new。

        public static void main(String[] args) {
            Integer a = new Integer(10);
            int b = 10;
            System.out.println(a == b);
        }
    

    结果为true
    因为Integer类型和int比较时,会自动拆箱,化为基本类型数据比较。

    触发自动拆箱

    算术运算会触发自动拆箱

  • 相关阅读:
    python使用数据库的一些操作
    正则表达式整理
    tomcat启动成功但是访问不到官网
    控制反转 依赖注入 AOP 和 IOC
    abstract 和 interface区别
    input文本框 鼠标点击默认消失,不输入离开鼠标恢复默认值
    声明式管理事务:基于AspectJ的xml方式
    使用注解配置声明式事务
    spring事物 (mu课)
    oracle表之数据类型
  • 原文地址:https://www.cnblogs.com/dearcabbage/p/10603460.html
Copyright © 2011-2022 走看看