Java 摘引类型的疑惑
Java 引用类型的疑惑
Integer不是引用类型吗,为何最终结果仍是输出1
------解决方案--------------------
看看Integer源码就明白了
------解决方案--------------------
首先给你一个肯定的答案:Java中引用类型的参数传递的是引用(即地址值),你所认知的是对的。
其次,你之所以问这个问题是因为你忽视了一点:
i = 3; 是修改原对象的值为3呢?还是重新new了一个值为3的Integer对象,并修改i的引用地址?
其实这个问题huxiweng提供的源码已经给出答案了,Integer中过的value属性是final的。
所以答案只能是后者,即重新new了一个值为3的Integer对象,并修改i的引用地址。
如果你还怀疑的话你可以思考这么一个问题:
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);
}
}
Integer不是引用类型吗,为何最终结果仍是输出1
------解决方案--------------------
看看Integer源码就明白了
/**
* 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;
}
------解决方案--------------------
首先给你一个肯定的答案:Java中引用类型的参数传递的是引用(即地址值),你所认知的是对的。
其次,你之所以问这个问题是因为你忽视了一点:
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); // 你试试