黑马程序员技术交流社区
标题:
为什么输出是这个呢
[打印本页]
作者:
taoge
时间:
2013-12-22 18:43
标题:
为什么输出是这个呢
public class Example
{
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String args[])
{
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.println(ex.ch);
}
public void change(String str, char ch[])
{
str = "test ok";
ch[0] = 'g';
}
}
复制代码
为什么输出是good and gbc呢?change方法为什么只改变了ch的值?
作者:
panzhenglian
时间:
2013-12-22 19:21
准确的说 change方法只改变了ch零角标位的值,,代码中改变的str值改变的只是change方法中局部变量str的值,正确的做法是在change方法的str前面加上this,代表使用这个方法的对象引用,比如这样,输出就成了test ok and gbc
public class Example
{
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String args[])
{
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.println(ex.ch);
}
public void change(String str, char ch[])
{
this.str = "test ok";
ch[0] = 'g';
}
}
复制代码
作者:
smileven
时间:
2013-12-23 03:14
这个是参数传递过程中的问题。
ex.str是将str的值赋给了change函数中的字符串str。
所以change操作修改的只是内存中新建的属于change函数的str的值,
在函数操作完成退出时这个临时建立的变量str是会自动释放的,并没有保存为ex.str的值。
ex.ch是将字符数组的引用传给了change函数中的字符数组ch。
传引用和传值的区别就在这儿了。
如果把ch的引用传递个change中的ch。那么两个ch指向的是同一个字符数组,也就是main函数中创建的ch数组。
所以change操作修改的内存区域是main中ch的内存区域,所以change操作完成退出时,main中ch的值被修改了。
如果还不理解建议看一下C++中参数传递过程中传值和传引用的区别,java中对这个的介绍不是很清楚。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2