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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邝雄伟 中级黑马   /  2013-1-11 00:50  /  1314 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-16 12:26 编辑

求分析一下以下代码运行的结果为什么是10 和40 ,想不明白,谢谢

public class Pass {
        static int j= 20;
        public static void main(String argv[]){
                int i = 10;
               
                Pass p = new Pass ();
                p.amethod(i);
                System.out.println(i);
                System.out.println(j);
        }
                public void amethod(int x){
                        x = x*2;
                        j= j*2;
                }
}

评分

参与人数 1黑马币 +6 收起 理由
Rancho_Gump + 6 神马都是浮云

查看全部评分

5 个回复

倒序浏览
public class Pass {
        static int j= 20;
        public static void main(String argv[]){
                int i = 10;
               
                Pass p = new Pass ();
                p.amethod(i);//把10传到x,运算后x是20,i还是10
                System.out.println(i);//10
                System.out.println(j);//40
        }
                public void amethod(int x){
                        x = x*2;
                        j= j*2;//j是全局变量,运算后j是40
                }
}

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. public class Pass {
  2.          static int j= 20;
  3.          public static void main(String argv[]){
  4.                  int i = 10;
  5.                  
  6.                 Pass p = new Pass ();
  7.                  p.amethod(i);
  8.                  System.out.println(i);
  9.                  System.out.println(j);
  10.          }
  11.                  public void amethod(int x){
  12.                          x = x*2;
  13.                          j= j*2;
  14.                  }
  15. }
复制代码
i是局部变量,当你传入amethod以后,i就已经将数值交给了x,后面的x=x*2都是x在参加运算,而你要打印i的值,所以只能打出你当初初始化i时所赋的值10。
j是全局变量,在pass类中全局有效,所以你在amethod中对j进行了修改,而后打印j仍然是参与运算后的值为40

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
郭嘉 发表于 2013-1-11 02:33
i是局部变量,当你传入amethod以后,i就已经将数值交给了x,后面的x=x*2都是x在参加运算,而你要打印i的值 ...

赞一个~~~~
回复 使用道具 举报
我是菜鸟 发表于 2013-1-11 02:18
public class Pass {
        static int j= 20;
        public static void main(String argv[]){

{:3_49:}{:3_48:}
回复 使用道具 举报
java值传递的问题,你传入方法中的值只是i的一个副本。真正参与运算的是副本的值,i本身没有受到任何影响。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马