A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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中数组变化了 ,图三也是引用传递


5 个回复

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

重新编辑了贴子,看下第三个程序。
回复 使用道具 举报
形参与实际参数传递,记住一个结论就:{:3_53:}
基本数据类型:形参的改变对实际参数没有影响;
引用数据类型:形参的改变直接影响实际参数。
Java中只有值的传递,引用数据类型传递的是首地址值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马