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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 葛迅 中级黑马   /  2013-4-9 07:37  /  2186 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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.        
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

12 个回复

倒序浏览
首先Java中只有值传递,这句函数调用max(1,2,max);
你把max函数中max变量给变了,不会影响到主函数中的max变量

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
魏福伟 发表于 2013-4-9 08:03
首先Java中只有值传递,这句函数调用max(1,2,max);
你把max函数中max变量给变了,不会影响到主函数中的max ...

我还是不是很明白 能画个流程吗。。
回复 使用道具 举报
传进去都是其副本的值,只对副本进行了修改,对其本身并没有变化

点评

哈哈 一目了然 多谢多谢!!  发表于 2013-4-9 14:41

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
int max = 0;
System.out.println(max);
很简单的一个事,这里你 max(1,2,max)
只是把max的值传进去
在你的max方法中的max是个局部变量
定义在参数列表中也是局部变量,所以它对主方法中的max没有任何影响
建议你看看局部变量的复习知识

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
值传递的问题~我也遇到过~2货一样纠结了半天~在 Java 应用程序中,当对象引用是传递给方法的一个参数时,您传递的是该引用的一个副本(按值传递),而不是引用本身。
建议百度值传递~一两句说不清~
回复 使用道具 举报
谢达 发表于 2013-4-9 08:51
传进去都是其副本的值,只对副本进行了修改,对其本身并没有变化

很精辟!
回复 使用道具 举报
int max = 0;  //局部变量
max(1,2,max); //执行max方法,并出入参数,而max方法中进行修改,只是修改的另外一个新的max对象,当这个方法执行完毕,这个对象会被垃圾回收机制回收掉.
System.out.println(max); //打印局部变量中的max的值,也就是max=0,此时内存中也只有一个max属性值;

点评

明白了 通俗易懂 精辟!  发表于 2013-4-9 14:40

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 通行天下 于 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.        }
复制代码
这样写就对啦,希望对你有帮助!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 改动的地方可以加个注释~

查看全部评分

回复 使用道具 举报
main方法中定义的max是局部变量,max方法中的max也是局部变量,这两个变量只在自己所在的函数中有效,在max方法中改变的是max方法中的max,因为int类型是基本数据类型,使用值传递,无论该方法怎样操作,对main方法中的max变量没有任何影响
回复 使用道具 举报
值传递   
回复 使用道具 举报
哇 多谢大家  论坛还是牛人多啊  
回复 使用道具 举报
通行天下 发表于 2013-4-9 09:49
这样写就对啦,希望对你有帮助!

呵呵 ,下次会注意的,谢谢提醒啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马