黑马程序员技术交流社区
标题:
下面的程序运行结果是什么?为什么?
[打印本页]
作者:
ameanboy
时间:
2016-3-17 10:44
标题:
下面的程序运行结果是什么?为什么?
来试试自己对于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";
ch[0] = 'g';
}
}
作者:
freshnboy
时间:
2016-3-17 11:06
本帖最后由 freshnboy 于 2016-3-17 11:11 编辑
运行应该结果是“good and gbc”
首先 str 和 ch两个变量是example的成员变量,并且初始值是good和 [a,b,c]
其次 change方法内的string类型变量不能改变传入的参数值,这里好像有个“string类型虽然是引用数据类型但是在当做参数传入的时候跟基本数据类型差不多”的知识点。而数组名是引用数据类型,所以它可以改变对应内存中的值。
最后输出是“good(初始化之后没被改变) and(你自己加的) gbc(只改变了ch[0],后面的没变)”。
作者:
11210107
时间:
2016-3-17 11:07
看一下Java中参数传递机制(值传递)
作者:
xushao
时间:
2016-3-17 12:34
首先第一点 String 传值传的是地址值。二、change方法中String类型的参数,哪怕是跟传入的变量名一样。参数列表中的参数,只属于方法中定义的一个变量,两者都没有一毛钱关系。方法在操作完后就进行释放了 ,并没有改变主方法调用的变量。 数组传递也是传递地址值。两个数组指向一个地址值,但是你对地址中的参数进行了操作,所以两个数组变量都会有所改变
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2