在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等,这些是按值传递的。