java - 澄清拳击

标签 java boxing

我们可以在装箱后调用原始包装类作为引用类型吗?

我也知道 AtomicInteger , AtomicLong , AtomicBooleanAtomicReference<V>是可变的。

    Integer age = new Integer(23);

    Integer old = age;       

    System.out.println("Age : "+age);
    System.out.println("Old : "+ old);

    System.out.println("*************");

    age = 24;

    System.out.println("Age : "+age);
    System.out.println("Old : "+ old);

结果

Age : 23 

Old : 23

After update ****

Age : 24

Old : 23

我同意原语及其包装器是不可变的。 但是这里拳击的意义\目的是什么?

从维基百科复制:

Boxing, otherwise known as wrapping, is the process of placing a primitive type within an object so that the primitive can be used as a reference object.

最佳答案

如果您使用基元,您的程序将以相同的方式工作(第二个分配使用自动装箱,因此它不会改变任何东西)。包装器确实是引用类型,但您不能利用它,因为在 Java 中定义的原语的所有包装器类都是不可变的

正因为如此,例如,您不能将包装的 int 发送到方法中,在那里修改它,并期望调用者看到原始包装器的修改。如果您需要此功能,则必须编写自己的可变包装器。

关于java - 澄清拳击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20636485/

相关文章:

java - 获取一个月的第一个星期一

java - 在 Java 中缩小和混淆 JavaScript 代码

.net - 装箱和拆箱是否有相同的性能影响?

java - Java中如何将int[]转换为List<Integer>?

java - GSON 解析器在循环 json 时跳过对象

java - 禁用注释处理,但在 servlet api 3.0 (Tomcat7) 中启用 web-fragments 功能

java - Sonarqube gradle 插件覆盖 Lombok

java - 检查 Boolean.TRUE/Boolean.FALSE 是否可以避免装箱/拆箱?

c# - 为什么 Enum 的 HasFlag 方法需要装箱?

c# - 通用约束如何防止使用隐式实现的接口(interface)对值类型进行装箱?