黑马程序员技术交流社区

标题: 求解答函数间变量传递的问题 [打印本页]

作者: silencer    时间: 2015-4-6 21:06
标题: 求解答函数间变量传递的问题
本帖最后由 silencer 于 2015-4-9 13:58 编辑





public static void changStr(String str){
      str="welcome";
}
public static void main(String[]args)
{
      String str="1234";
      changStr(str);
      System.out.println(str);
}
结果:1234

为什么图1中x,y值没有变化,而图2中数组变化了 ,图三也是引用传递



作者: AndroidM    时间: 2015-4-6 21:43
这是值传递和 引用传递的问题,图一中,是x,y的值 赋给了方法中的参数(即局部变量x,y),所以你在方法中交换的实际是 局部变量的值,所以打印出结果没变化 ,而图二中,传递的是对象的引用(即对象在heap中的地址),所以传递后,方法中局部变量 其实也指向heap中的对象,所以可以直接改变对象的值。
作者: 海贼王019    时间: 2015-4-6 21:50
因为图一传的是数值,而且没有返回值,图二传的是地址,地址指向而改变了以前存储的值
作者: 帆风顺    时间: 2015-4-6 22:56
因为 方法中的变量 都在栈内存中,使用完后,函数结束了,变量也就不存在了,所以主函数里 存的是以前未变化的值!
作者: silencer    时间: 2015-4-8 20:33
海贼王019 发表于 2015-4-6 21:50
因为图一传的是数值,而且没有返回值,图二传的是地址,地址指向而改变了以前存储的值 ...

重新编辑了贴子,看下第三个程序。
作者: showdy    时间: 2015-4-8 21:19
形参与实际参数传递,记住一个结论就:{:3_53:}
基本数据类型:形参的改变对实际参数没有影响;
引用数据类型:形参的改变直接影响实际参数。
Java中只有值的传递,引用数据类型传递的是首地址值。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2