Java中自动装箱原语的重点是什么?

时间:2016-08-21 14:05:13

标签: java reference pass-by-reference boxing unboxing

拥有IntegerBoolean等等并称之为" ...拳击"如果他们的行为不像盒装物品那么你可以通过参考"并取消装箱以改变其价值?

以下是"拆箱"的示例我实际发现并不是真正拆箱。

    public static void main(String[] args) {
        Boolean x = true;
        foo(x);
        System.out.println(x);

        Integer num = 9;
        bar(num);
        System.out.println(num);
    }

    private static void bar(Integer num) {
        num = 5;
    }

    static void foo(Boolean x){
            boolean y = false;
            x = y;
    }

它打印为真,然后是9 btw。

2 个答案:

答案 0 :(得分:1)

  

Autoboxing是Java编译器自动转换   原始类型与其对应的对象包装器之间   类。例如,将int转换为Integer,将double转换为a   双,等等。如果转换是另一种方式,那就是   称为拆箱。   参考:https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

Java中自动装箱原语的重点是什么?

  1. 可以节省一些时间。

    int s=4; Integer s1=new Integer(s); //without autoboxing Integr s1=s; //autoboxing (saves time and some code) int k=s1; //unboxing

  2. 为什么整数/浮点数/十进制对象?(使用整数来解释)

    1. Maroun的回答中所述的Integers/Floats/Doubles etc.的数组列表。

    2. Java Library中的一些内置函数返回Integer对象。因此,您只需使用自动装箱而不是使用primitive int将值存储在returnedIntegerObject.intValue()中。

    3. 让我们将String s="5"转换为整数。

      • 使用内置函数public static Integer valueOf(String s)。如您所见,此函数的返回类型为Integer而不是int

      没有自动装箱:

      Integer a=Integer.valueOf(s);
      int b= a.intValue(); //getting the primitive int from Integer Object
      

      使用自动装箱

      int b=Integer.valueOf(s); //saves code and time
      

答案 1 :(得分:0)

拥有这些包装类的重点主要是用于泛型。在Java中,如果我想创建一个整数的ArrayList,我不能执行以下操作:

ArrayList<int> intList = new ArrayList<int>()

这不起作用,因为泛型只适用于对象,而“int”是原语。通过使用包装器,

ArrayList<Integer> intList = new ArrayList<Integer>()

我可以解决这个问题。