这个Java程序为什么输出“good and gbc”
发布网友
发布时间:2024-10-13 14:20
我来回答
共4个回答
热心网友
时间:2024-10-19 23:57
这里就涉及到java中的值传递和引用传递的问题咯,
在调用方法的过程中,如果你传入的参数是对象,那么其实实际是引用传递。
所以你在方法体里面将这个引用换成其他引用,是不会对真正的对象产生影响的。
但是只需要记住一个事实就是:
在方法体中对参数进行重新赋值,是不会改变原有的对象的
但是如果是对参数说指向的对象中某个属性进行改变的话,就会产生作用。
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.print(ex.ch);
}
public void change(String str, char ch[]) {
str = "test ok";//str是一个引用,它指向一个String对象,你这里的赋值操作指示将他指向了另外一个String对象。要注意的是这个方法里面的str变量和你前面定义的类变量虽然名字相同,但他们不是同一个东西哦。
ch[0] = 'g';//数组引用也是指向一个数组对象,这里操作的是数组对象中的一个元素,所以改变是影响到了那个数组
}
}
热心网友
时间:2024-10-19 23:56
类似这种问题 分析一下内存 是怎么运行的 就能理解了 ;
在执行 change 方法之前的内存和执行change方法之后的内存情况,我分别画了一下 ,如果还是不明白,那就在接着说咯
热心网友
时间:2024-10-20 00:03
楼主人研究下变量生命周期就知道了,形参只在方法内有效,你再怎么改变都不影响。
说个通俗的例子:
你家里有一袋包子,你出去上班路上买了一袋包子,走到公司时你把路上买的这袋包子吃了,你家里的包子还在么?
热心网友
时间:2024-10-19 23:59
你想要改变成员变量的值,请在chang的方法str和ch变量前加上this.指出变量的所属。