java函数参数传递方式

1、对于基础类型,传递值;

     函数内对参数的操作不影响到外部的参数值。

2、对于非基础类型,传引用。

     一般情况下,函数中参数的操作会影响到外部的参数值。如函数对Student对象修改name属性后,外部的Student对象的name就变了;

    对于基础类型的包装类型,本来也适用于本规则,但实际却另外蹊跷:

   

public static void main(String[] args) {
		Integer i = 100;
		changeVal(i);
		System.out.println(i);
	}
	public static void changeVal(Integer i)
	{
		i = 9;
	}
打印结果为:100

    上面语句执行后,外部对象的值不会变,原因在于,这个实际的实际行为为:i = Integer.valueOf(9); 这相当于给这个参数重新赋值了,而不是对原有对象属性进行修改,所以外部值不会变;

    那是否有办法进行改变呢?

    有的,通过反射机制修改Integer对象的内部属性。

public static void changeVal(Integer i)
	{
		try {
			Class c=Integer.class; 
			Field f=c.getDeclaredField("value"); 
			f.setAccessible(true); 
			f.set(i, 9);
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

这样执行的结果就是9了。


猜你喜欢

转载自blog.csdn.net/yinxing2008/article/details/25433271
今日推荐