Java-Interger和int之间关系及相互转换(拆箱,装箱)

  • Post author:
  • Post category:java


/*
面试题
* int和Integer的区别:
  1 修饰变量
*   (1)修饰全局变量
          初始值不同(int 0  Integer null
     (2)修饰局部变量
          Integer可以通过new的方式赋值
  2 功能
       Integer是一个类类型,可以有属性和方法,可以调用属性和方法完成相应功能,int不可以
  3 内存
       Integer 缓存(常量池)   堆
       int 结合情况  栈中的值  或者对象的堆中的值

       == 比较 额外注意内存问题  int只比较内容 ,Integer比较地址
*
*
*
* */
public class IntegerDemo {
    int a;
    Integer a1;
    @Test
    /*
    * 术语
    * */
    public void method_01(){
        // 拆装箱     手动拆装箱 《-jdk1.5(jdk5.0)-》自动拆装箱
        // jdk1.5前手动拆装箱
        // 装箱 (int->Integer)
        int i = 10;
        Integer j = new Integer(i);//手动装箱操作 构造方法形式
        Integer k = Integer.valueOf(i);// 手动装箱操作 静态方法形式

        // 拆箱 (Integer ->int
        int k2 = j.intValue();//手动拆箱操作

        // jdk1.5后自动拆装箱
        int i2 = 4;
        Integer i3 = i2;// 装箱
        i2 = i3;// 拆箱
    }

    @Test
    /*
    * 方法 (比较  ,类型转换)
    * */
    public void method_02(){
        Integer i = 5;
        Integer i2 = new Integer(5);

        Integer num1 = 5;
        Integer num2 = 6;

        if(num1<num2){
            System.out.println("<");//输出
        }

        // 比较
        if(num1.compareTo(num2) == 0){
            System.out.println("num1=num2");
        }else if(num1.compareTo(num2) > 0){
            System.out.println("num1>num2");
        }else{
            System.out.println("num1<num2");
        }

        // String ->int(Integer) [字符串和基本类型间]要转什么类型就写什么类型的类类型.valueOf()

        // int ->String
        int num3 = 5;
        String str3 = String.valueOf(num3);// 推荐方案
        String str4 = num3 + "";

        // String ->int
        String str5 = "5";// 有概率抛出异常(NumberFormatException 数字格式化异常)
        int num5 = Integer.valueOf(str5);
        int num6 = Integer.parseInt(str5);// 推荐方案

        // double String互转
        double d1 = 5.5;
        String d11 = String.valueOf(d1);
        d1 = Double.valueOf(d11);
        d1 = Double.parseDouble(d11);

    }

    @Test
    /*
    * 内存问题
    * */
    public void method_03(){
        // == 在引用类型比较时比较的是地址
        // new出来的内容互相独立,地址一定不同
        // Integer缓存 范围(-128-127)  Double Float没有缓存
        // Integer 和int 比较自动转int后比较
        Integer i1 = new Integer(5);
        Integer i2 = new Integer(5);
        System.out.println(i1==i2);//false

        Integer i3 = 500;
        Integer i4 = 500;
        System.out.println(i3==i4);//false

        Integer i5 = 100;
        int i6 = 100;
        System.out.println(i5 == i6);//true

        Double d5 = 100.5;// double->Double才可以自动拆装箱
        Double d6 = 100.5;
        System.out.println(d5 == d6);//false

        Integer i7 = new Integer(100);// 拆
        int i8 = 100;
        System.out.println(i7 == i8);//true
    }
}

总结

  1. == 在引用类型比较时比较的是地址

  1. new出来的内容互相独立,地址一定不同

  1. Integer缓存 范围(-128-127)

    注意: Double Float没有缓存

  1. Integer 和int 比较自动拆箱转为int后比较

面试题

int和Integer的区别:

  1. 修饰变量

  • (1)修饰全局变量

初始值不同(int初始值0 ,Integer初始值null)

  • (2)修饰局部变量

Integer可以通过new的方式赋值

  1. 功能

  • Integer是一个类类型,可以有属性和方法,可以调用属性和方法完成相应功能,int不可以

  1. 内存

  • Integer 缓存(常量池) 堆

  • int 结合情况 栈中的值 或者对象的堆中的值

== 比较 额外注意内存问题 int只比较内容 ,Integer比较地址



版权声明:本文为m0_59167353原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。