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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© damofeixue 中级黑马   /  2015-10-30 13:24  /  279 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

主函数调用change方法后,下面输出语句为什么打印出来还是a=10,b=20呀,那那种情况change调用后值会改变呢?

class Demo
        {
                public static void main(String[] args)
                {
                        int a = 10;
                        int b = 20;
                        System.out.println("a:"+a+",b:"+b);  
                        change(a,b);
                        System.out.println("a:"+a+",b:"+b);  

                        int[] arr = {1,2,3,4,5};
                        change(arr);
                        System.out.println(arr[1]);   
                }

                public static void change(int a,int b)
                {
                        System.out.println("a:"+a+",b:"+b);  
                        a = b;               
                        b = a + b;       
                        System.out.println("a:"+a+",b:"+b);
                }

                public static void change(int[] arr)
                {
                        for(int x=0; x<arr.length; x++)
                        {
                                if(arr[x]%2==0)
                                {
                                        arr[x]*=2;
                                }
                        }
                }
        }

6 个回复

正序浏览
young_ants 发表于 2015-10-30 19:45
哥们,你的代码太乱,没有任何注释,不知道这段代码要干什么,只能改到你两个数的交换,无法了解你方法重载后 ...

不好意思,下次写规范点
回复 使用道具 举报
谢谢大家,我的问题解决了
回复 使用道具 举报
zhangyibo 来自手机 中级黑马 2015-10-30 20:25:15
报纸
就是你要是想调用函数改变主函数里的值,就得在函数上加返回值类型并且写return语句
回复 使用道具 举报
zhangyibo 来自手机 中级黑马 2015-10-30 20:23:23
板凳
没注意你把主函数里的打印注释了,刚才的答案第一个和最后一个没有,其他的有
回复 使用道具 举报
zhangyibo 来自手机 中级黑马 2015-10-30 20:22:20
藤椅
主函数执行第一个print a=10,b=20
然后调用change方法,打印a=10,b=20
执行代码后打印a=20,b=40
函数调用结束,但是没有return,所以a和b得值在内存中被释放。
函数调用结束,打印a=10,b=20
以上就是你第一次调用change时的4次打印结果
回复 使用道具 举报
  1. class Test {
  2.         public static void main(String[] args)
  3.         {
  4.                 int a = 10;
  5.                 int b = 20;
  6.                 //System.out.println("a:"+a+",b:"+b);  
  7.                 change(a,b);
  8.                 //System.out.println("a:"+a+",b:"+b);  

  9.                 int[] arr = {1,2,3,4,5};
  10.                 change(arr);
  11.                 System.out.println(arr[1]);   
  12.         }

  13.         public static void change(int a,int b)
  14.         {
  15.                 System.out.println("a:"+a+",b:"+b);  
  16.                 a = a ^ b;               
  17.                 b = a ^ b;
  18.                 a = a ^ b;
  19.                 System.out.println("a:"+a+",b:"+b);
  20.         }

  21.         public static void change(int[] arr)
  22.         {
  23.                 for(int x=0; x<arr.length; x++)
  24.                 {
  25.                         if(x%2==0)
  26.                         {
  27.                                 x *=2;
  28.                         }
  29.                 }
  30.         }
  31. }
复制代码



哥们,你的代码太乱,没有任何注释,不知道这段代码要干什么,只能改到你两个数的交换,无法了解你方法重载后,对数组要实现什么功能????
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马