`

java参数传递

阅读更多

 

回帖地址:http://www.iteye.com/topic/12961#75177

 

所有的参数传递都是 传值,从来没有 传引用 这个事实。 
所有的参数传递都会在 程序运行栈上新分配一个值的复制品. 

楼主的第一段代码。 

 

public static void test(Pass passA); {   
          passA.a="abc";   
}   

 

 


这个传的 PassA 的 地址值。这个 地址值 被复制了一份。 
不信,你写: 

 

public static void test(Pass passA); {   
passA = null;  
} 

 

看看, 对passA有什么影响? 
毫无作用。函数调用出来后,passA还是原来的值,不会变成Null. 

但是,你的代码对 passA进行了操作  passA.a ,改变了passA的成员变量。 
这个成员变量是一个真实指向String 的 地址,当然能够被改变。 
这就是操作 (.)  和 赋值 (=) 的区别。 
这是对 成员变量 a 的 赋值。真正改变了成员变量 a 的值。 

注意,这里传递的参数是 passA, 而不是 a. 
所以,passA 被复制了一份。passA 的这个副本的 a 变量还 指向 原来的 passA 的 a 变量。 

public static void test(StringBuffer str) { 
str.append("World"); 
} 

 

 

只有对参数的 赋值,没有对参数的操作,当然不会产生影响。 

 

public static void test(StringBuffer str) { 
str.append("World"); 
}  

对参数进行了操作,当然会产生影响。 

 

	public static void main( String[] args ){
	
		String str = "one";
		
		helo(str);
		
		System.out.println(str);
		
		int n = 1;
		
		helo1(n);
		
		System.out.println(n);
	}
	
	public static void helo( String str ){
		str = "two";
	}
	
	public static void helo1(int n){
		n=2;
	}

 

输出:

one

1

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics