基本数据类型的包装类都是不可变类,如果将其以参数的形式传递,并在方法中对其值进行修改,达不到预期的效果。
<pre name="code" class="java">public class TestInteger {
public static void main(String[] args) {
Integer y = new Integer(3);
tripleInteger(y);
System.err.println(y); /*** 3 **/
}
private static void tripleInteger(Integer value) {
value = value * 5;
System.err.println("value = "+value); /*** value = 15 **/
}
}
如果想要传递的参数在方法中被修改后,其真实的值也被修改,可以使用org.omg.CORBA包中的持有者(Holder)类型,可以对传入到方法中参数的值的改变达到改变对象包装器中真实内容的改变。
public class TestInteger {
public static void main(String[] args) {
Integer y = new Integer(3);
IntHolder holder = new IntHolder(y);
tripleInteger(holder);
System.err.println(holder.value); /*** 15 **/
}
private static void tripleInteger(IntHolder holder) {
holder.value = holder.value * 5;
System.err.println("value = "+holder.value); /*** value = 15 **/
}
}
当在一个方法中调用另一个方法,且涉及到临时变量的传递和值的改变的问题,就可以使用持有者(Holder)类型进行操作。
import org.omg.CORBA.IntHolder;
public class TestInteger {
public static void main(String[] args) {
int y = 3;
/**可以访问并修改存储在对象中的值**/
IntHolder holder = new IntHolder(y);
tripleHolder(holder);
System.err.println(holder.value); /***15**/
int x = 3;
/**值没有改变**/
Integer integer = new Integer(x);
tripleInteger(integer);
System.err.println(integer); /***3**/
}
private static void tripleInteger(Integer integer) {
integer = integer.intValue() * 5;
System.err.println("integer = "+integer); /***15**/
}
private static void tripleHolder(IntHolder holder) {
holder.value = holder.value * 5;
System.err.println("holder = "+ holder.value); /***15**/
}
}