有些人认为包装器类可以用来实现修改数值参数的方法,然而这是错误的。
由于Java方法都是值传递,所以不可能编写一个下面这样的能够增加整型数值的Java方法。
public static void triple1(int x)
{
x = 3 * x;
}
将int替换成Integer又会怎么样呢?
public static void triple2(Integer x)
{
x = 3 * x;
}
问题是Integer对象是不可变的:包含在包装器中的内容不会改变。不能使用这些包装器类创建修改数值参数的方法。
如果想编写一个修改数值参数的方法,就需要使用在org.omg.CORBA包中定义的持有者(holder)类型,包括IntHolder、
BooleanHolder等。每个持有者类型都包含一个共有(!)域值,通过它可以访问存储在其中的值。
public static void triple3(IntHolder x)
{
x.value = 3 * x.value;
}
编译并执行如下程序,运行结果见图1。
import org.omg.CORBA.*;
public class tt
{
public static void triple1(int x)
{
x = 3 * x;
}
public static void triple2(Integer x)
{
x = 3 * x;
}
public static void triple3(IntHolder x)
{
x.value = 3 * x.value;
}
public static void main(String[] args)
{
System.out.println("x1=============");
int x1 = 1;
triple1(x1);
System.out.println(x1);
System.out.println("x2=============");
int x2 = 1;
triple2(x2);
System.out.println(x2);
System.out.println("x3=============");
IntHolder x3 = new IntHolder(1);
triple3(x3);
System.out.println(x3.value);
}
}
图1