本文共 654 字,大约阅读时间需要 2 分钟。
Java 包装类
考虑下面的Java程序。
// Java program to demonstrate that prmitive
// wrapper classes are immutable
class Demo
{
public static void main(String[] args)
{
Integer i = new Integer(12);
System.out.println(i);
modify(i);
System.out.println(i);
}
private static void modify(Integer i)
{
i = i + 1;
}
}
输出:
12
12
参数i在修改中引用并引用与main()中的i相同的对象,但对i的更改未反映在main()中,为什么?
说明:
所有原始包装类(Integer,Byte,Long,Float,Double,Character,Boolean和Short)在Java中都是不可变的,因此加法和减法等操作会创建一个新对象而不会修改旧对象。
modify方法中的下面一行代码在包装类Integer上运行,而不是int
i = i + 1;
它执行以下操作:
Unbox i为int值
将1添加到该值
将结果存储到另一个Integer对象中
将生成的整数分配给i(从而更改我引用的对象)
由于对象引用是按值传递的,因此在modify方法中采取的操作不会更改在修改调用中用作参数的i。因此,主程序在方法返回后仍然打印12。
转载地址:http://tbevl.baihongyu.com/