在Java中,包装类型如Integer、Double、Boolean等都是不可变的,即一旦创建,它们的值就不能改变。当你将包装类型作为方法参数并且使用引用传递时,实际上传递的是对象引用的值。如果方法内部修改了这个引用,外部的变量也会被影响,因为它们指向同一个对象。

以下是一个示例代码,演示了如何通过引用传递更改包装类型的值:


public class Main {
    public static void main(String[] args) {
        Integer number = 10; // Autoboxing - 自动将基本类型int转换为Integer包装类型
        System.out.println("Before: " + number); // 输出10
        changeNumber(number); // 调用方法,传递引用
        System.out.println("After: " + number); // 输出100,因为方法内部更改了引用指向的对象
    }
    public static void changeNumber(Integer num) {
        num = 100; // 这里改变的是方法内部的局部引用,不会影响main方法中的number变量
    }
 
}

如果你希望内部方法的更改不影响原始的包装类型变量,你可以创建一个新的包装类型对象替换旧的,或者如果是Integer、Double等可能自动拆箱和封装的类型,你可以使用原始类型int、double等,这些是按值传递的。