黑马程序员技术交流社区

标题: 为什么答案是0? [打印本页]

作者: 葛迅    时间: 2013-4-9 07:37
标题: 为什么答案是0?
  1.        
  2.         public static void main(String[] args)
  3.         {
  4.                 int max = 0;
  5.                 max(1,2,max);
  6.                 System.out.println(max);
  7.         }
  8.        
  9.         public static void max(int x,int y,int max)
  10.         {
  11.                 if( x >  y)
  12.                         max = x;
  13.                 else
  14.                         max = y;
  15.         }
  16.        
  17.        
  18.        
复制代码

作者: 魏福伟    时间: 2013-4-9 08:03
首先Java中只有值传递,这句函数调用max(1,2,max);
你把max函数中max变量给变了,不会影响到主函数中的max变量


作者: 葛迅    时间: 2013-4-9 08:17
魏福伟 发表于 2013-4-9 08:03
首先Java中只有值传递,这句函数调用max(1,2,max);
你把max函数中max变量给变了,不会影响到主函数中的max ...

我还是不是很明白 能画个流程吗。。
作者: 谢达    时间: 2013-4-9 08:51
传进去都是其副本的值,只对副本进行了修改,对其本身并没有变化

作者: 我手心里的宝    时间: 2013-4-9 08:51
int max = 0;
System.out.println(max);
很简单的一个事,这里你 max(1,2,max)
只是把max的值传进去
在你的max方法中的max是个局部变量
定义在参数列表中也是局部变量,所以它对主方法中的max没有任何影响
建议你看看局部变量的复习知识
作者: 曹雨禾    时间: 2013-4-9 09:14
值传递的问题~我也遇到过~2货一样纠结了半天~在 Java 应用程序中,当对象引用是传递给方法的一个参数时,您传递的是该引用的一个副本(按值传递),而不是引用本身。
建议百度值传递~一两句说不清~
作者: 张旺达    时间: 2013-4-9 09:22
谢达 发表于 2013-4-9 08:51
传进去都是其副本的值,只对副本进行了修改,对其本身并没有变化

很精辟!
作者: ①人←①城市    时间: 2013-4-9 09:47
int max = 0;  //局部变量
max(1,2,max); //执行max方法,并出入参数,而max方法中进行修改,只是修改的另外一个新的max对象,当这个方法执行完毕,这个对象会被垃圾回收机制回收掉.
System.out.println(max); //打印局部变量中的max的值,也就是max=0,此时内存中也只有一个max属性值;

作者: 通行天下    时间: 2013-4-9 09:49
本帖最后由 通行天下 于 2013-4-9 09:53 编辑
  1.   

  2. 02.        public static void main(String[] args)

  3. 03.        {

  4. 04.                int max = 0;

  5. 06.                System.out.println(max(1,2));

  6. 07.        }

  7. 08.        

  8. 09.        public static int max(int x,int y)

  9. 10.        {

  10. 11.                if( x >  y)

  11. 12.                        max = x;

  12. 13.                else

  13. 14.                        max = y;
  14.                     return  max;

  15. 15.        }
复制代码
这样写就对啦,希望对你有帮助!
作者: 王怀亮    时间: 2013-4-9 13:06
main方法中定义的max是局部变量,max方法中的max也是局部变量,这两个变量只在自己所在的函数中有效,在max方法中改变的是max方法中的max,因为int类型是基本数据类型,使用值传递,无论该方法怎样操作,对main方法中的max变量没有任何影响
作者: 王大斌    时间: 2013-4-9 13:11
值传递   
作者: 葛迅    时间: 2013-4-9 14:37
哇 多谢大家  论坛还是牛人多啊  
作者: 通行天下    时间: 2013-4-9 17:33
通行天下 发表于 2013-4-9 09:49
这样写就对啦,希望对你有帮助!

呵呵 ,下次会注意的,谢谢提醒啦




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