【问题标题】:What's the point of autoboxing primitives in Java?在 Java 中自动装箱原语有什么意义?
【发布时间】:2016-12-28 03:38:56
【问题描述】:

拥有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;
    }

它打印 true 和 9 btw。

【问题讨论】:

  • Java 总是按值传递,没有例外。您正在更改方法内部的引用,这不会影响原始传递的值。还记得Integer不可变的
  • 但是num = 5; 不考虑拆箱吗?所以它改变了对象内部的值,并且对该对象的引用是相同的。 @MarounMaroun

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


【解决方案1】:

自动装箱是 Java 编译器进行的自动转换 在原始类型及其对应的对象包装器之间 类。例如,将 int 转换为 Integer,将 double 转换为 双倍,以此类推。如果转换以另一种方式进行,这是 称为拆箱。 参考: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

为什么是整数/浮点数/小数对象?(用整数来解释)

  1. Integers/Floats/Doubles etc. 的 ArrayList,如 Maroun 的回答中所述。

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

让我们将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

【讨论】:

    【解决方案2】:

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

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

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

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

    我可以解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 2011-01-19
      • 2023-04-06
      相关资源
      最近更新 更多