2 xiangpini111 xiangpini111 于 2014.12.18 11:59 提问

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]);
    }
}

}

4个回答

u013147600
u013147600   2014.12.18 14:24
已采纳

这就涉及到java中函数参数的值传递和引用传递,
1.值通常是只原始数据类型比如int,char等,你的代码中的ch[0] 就是一个char类型的变量 ,遵循的是值传递
2.String是类,str作为一个对象,遵循的是引用传递,所以你是没有办法修改它的值的,只能改变它的引用

还不懂可以看这里 http://jackycheng2007.iteye.com/blog/935038
u013147600
u013147600 回复xiangpini111: 不要客气
大约 3 年之前 回复
xiangpini111
xiangpini111 谢谢!!谢谢!!懂了。。。
大约 3 年之前 回复
xiangpini111
xiangpini111 谢谢!!谢谢!!懂了。。。
大约 3 年之前 回复
bdmh
bdmh   Ds   Rxr 2014.12.18 13:05

有什么不对,ch[0]='g';已经将你传入的数组中的元素改了

xiangpini111
xiangpini111 那为什么str没变化啊。。。str不是也传进去了?
大约 3 年之前 回复
xiangpini111
xiangpini111 那为什么str没变化啊。。。str不是也传进去了?
大约 3 年之前 回复
u013756604
u013756604   2014.12.18 13:58

你的意思是想把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]);
}
}

u013756604
u013756604   2014.12.18 13:59

你的意思是想把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]);
}
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!