码迷,mamicode.com
首页 > 编程语言 > 详细

[Java]_函数传参的疑惑与思考

时间:2014-05-28 13:11:14      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:style   c   class   blog   code   java   

问题来源于leetcode上的两道题 Path Sum I && II,分别写了两个dfs。

1 void dfs(TreeNode node , int sum , ArrayList<Integer> curPath)
2 void dfs(TreeNode node , int sum , boolean ifExist)

问题:在1号中我可以在方法中修改curPath,在结束函数调用时,变量修改仍然生效。

     在2号问题中,我即使在函数中修改了ifExist,结束函数调用时,变量修改无效。

疑问:Java的参数传递方式?

解决:考虑下面三种情况:

1、

double a = 10;
void tripleValue(double x)
    x = 3 * x;
tripleValue(a);

上述代码运行后,a的值保持不变。结论一:方法不能修改一个基础数据类型(数值型和布尔型)的参数

 

2、

Employee a = new Employee("july");
void changeName(Employee x )
  x.name = "alice";
changeName(a);

上述代码运行后,a的name属性被修改为alice。结论二:方法可以改变一个对象参数的属性

 

3、

bubuko.com,布布扣
Employee a = new Employee("alice");
Employee b = new Employee("bob");
void swap(Employee p1 , Employee p2){
      Employee temp = p1;
      p1 = p2;
      p2 = temp;
}
swap(a , b);
bubuko.com,布布扣

上述代码运行后,a仍然为alice,b仍然为bob。结论三:方法不能让对象参数引用一个新的对象

 

因此:Java的函数传参全为值传递

在函数参数为基础数据类型时,方法参数得到参数值的拷贝;

当函数参数为对象时,方法参数得到参数地址的拷贝,但也不是对原对象的引用(引用:类似于对变量取别名,除了名字不一样外,其它均是一样的)。

 

[Java]_函数传参的疑惑与思考,布布扣,bubuko.com

[Java]_函数传参的疑惑与思考

标签:style   c   class   blog   code   java   

原文地址:http://www.cnblogs.com/glamourousGirl/p/3755112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!