黑马程序员技术交流社区

标题: 小问题,求指教 [打印本页]

作者: 邝雄伟    时间: 2013-1-11 00:50
标题: 小问题,求指教
本帖最后由 张向辉 于 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;
                }
}


作者: 李润根    时间: 2013-1-11 02:18
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
                }
}

作者: 郭嘉    时间: 2013-1-11 02:33
  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
作者: 高境    时间: 2013-1-11 09:21
郭嘉 发表于 2013-1-11 02:33
i是局部变量,当你传入amethod以后,i就已经将数值交给了x,后面的x=x*2都是x在参加运算,而你要打印i的值 ...

赞一个~~~~
作者: 高境    时间: 2013-1-11 09:21
我是菜鸟 发表于 2013-1-11 02:18
public class Pass {
        static int j= 20;
        public static void main(String argv[]){

{:3_49:}{:3_48:}
作者: 舒远    时间: 2013-1-11 09:26
java值传递的问题,你传入方法中的值只是i的一个副本。真正参与运算的是副本的值,i本身没有受到任何影响。





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