问题描述
- java中参数传递变换的问题,求问:结果为什么是这样的啊??求高手解答!拜谢~
-
求问:结果为什么是这样的啊??
change:Test
change:g
change:b
change:c
TestPram:Hello
TestPram:g
TestPram:b
TestPram:c
代码如下:
public class TestPram {
String str = "Hello";
char[] ch = {'a','b','c'};
public static void main(String[] args) {
TestPram tb = new TestPram();
tb.change(tb.str, tb.ch);
System.out.println("TestPram:"+tb.str);
for(int i=0;i<tb.ch.length;i++){
System.out.println("TestPram:"+tb.ch[i]);
}} public void change(String str,char[] ch){ str = "Test"; ch[0]='g'; System.out.println("change:"+str); for(int i=0;i<ch.length;i++){ System.out.println("change:"+ch[i]); } }
}
解决方案
这就涉及到java中函数参数的值传递和引用传递,
1.值通常是只原始数据类型比如int,char等,你的代码中的ch[0] 就是一个char类型的变量 ,遵循的是值传递
2.String是类,str作为一个对象,遵循的是引用传递,所以你是没有办法修改它的值的,只能改变它的引用
还不懂可以看这里 http://jackycheng2007.iteye.com/blog/935038
解决方案二:
有什么不对,ch[0]='g';已经将你传入的数组中的元素改了
解决方案三:
你的意思是想把str变成'text 'ch[0]变成g.b.c对不对?看你的change方法,虽然参数的名字和类中的属性名一样,但并不代表,他们可以代替属性,当参数名和属性名相同时,想要调用属性需要前面加个this,
str = "Test";想要改成你要的效果change方法如下
public void change(){
str = "Test";
ch[0]='g';
System.out.println("change:"+str);
for(int i=0;i<ch.length;i++){
System.out.println("change:"+ch[i]);
}
}
解决方案四:
你的意思是想把str变成'text 'ch[0]变成g.b.c对不对?看你的change方法,虽然参数的名字和类中的属性名一样,但并不代表,他们可以代替属性,当参数名和属性名相同时,想要调用属性需要前面加个this,
str = "Test";想要改成你要的效果change方法如下
public void change(){
str = "Test";
ch[0]='g';
System.out.println("change:"+str);
for(int i=0;i<ch.length;i++){
System.out.println("change:"+ch[i]);
}
}