62,621
社区成员
发帖
与我相关
我的任务
分享
public class JavaTest
{
private static void change(Integer i)
{
i = 3;
}
public static void main(String argv[])
{
Integer i = new Integer(1);
change(i);
System.out.println(i);
}
}
i = 3; // 请问这句话是什么过程?
i = 3; 是修改原对象的值为3呢?还是重新new了一个值为3的Integer对象,并修改i的引用地址?
其实这个问题huxiweng提供的源码已经给出答案了,Integer中过的value属性是final的。
所以答案只能是后者,即重新new了一个值为3的Integer对象,并修改i的引用地址。
如果你还怀疑的话你可以思考这么一个问题:
Integer a = new Integer(1);
Integer b = a; // 没错b和a同时指向一个对象
b = 3; // 这句话说明什么?他只是修改了b的引用,对a的值有影响吗?
System.out.println(a); // 你试试
Integer i = new Integer(1);
private static void change(Integer i)
{
i = 3;
}
public static void main(String argv[])
{
change(i);
System.out.println(i);
}你这样写就是3了
/**
* The value of the <code>Integer</code>.
*
* @serial
*/
private final int value;
/**
* Constructs a newly allocated <code>Integer</code> object that
* represents the specified <code>int</code> value.
*
* @param value the value to be represented by the
* <code>Integer</code> object.
*/
public Integer(int value) {
this.value = value;
}
i = 3; // 请问这句话是什么过程?
i = 3; 是修改原对象的值为3呢?还是重新new了一个值为3的Integer对象,并修改i的引用地址?
其实这个问题huxiweng提供的源码已经给出答案了,Integer中过的value属性是final的。
所以答案只能是后者,即重新new了一个值为3的Integer对象,并修改i的引用地址。
如果你还怀疑的话你可以思考这么一个问题:
Java中参数传递的都是值,对应基本类型,传递的是原值的拷贝;对于类类型,传递的是引用即地址的拷贝.
对于函数对参数的改变是否会影响原值的问题:值类型自然不会影响到原值.而对于类类型要看改变的是参数的地址还是值,如果是前者,参数和原引用指向了不同的地址,它们自然脱离了关系;如果是后者,修改的实例就是原引用指向的实例,这当然对原值进行了修改.