黑马程序员技术交流社区

标题: 请教一道数组题。 [打印本页]

作者: 黄诗宾    时间: 2013-3-21 18:47
标题: 请教一道数组题。
本帖最后由 黄诗宾 于 2013-3-21 19:14 编辑

public class Test     
{
        public static void leftshift(int i, int j)
        {
                   i+=j;
        //   System.out.println(i);     这里i是6
        }
        public static void main(String args[])
        {
                int i = 4, j = 2;
                leftshift(i,j);   
                System.out.println(i);   //请问这个I的值为什么是4?
        }
}
  请问下面代码调用了函数leftshift为什么i的值没有改变还是4?
  还有加注释的地方代码打印不是先读主函数么,为什么打印的顺序是6和4而不是4和6?


作者: 陈圳    时间: 2013-3-21 18:56
leftshift(i,j);   
这个方法内的i+=j;的值的改变只是方法里引用的值改变了,并没有把结果传回给外面的变量i,所以自然没有改变.
作者: blackcaismine    时间: 2013-3-21 19:04
java中函数传递参数的方式都是传值。传递的是变量的内容,函数中的产生一个新的变量来接收参数的值,它们两个是两个内容一样的不同变量,所以在函数中改变不会影响到原来的变量。   
至于为何是6 4 那是因为方法先被调用,方法中先println了,调用方法执行完才会接下来执行主函数的println 所以是 6  4
作者: 张君    时间: 2013-3-21 19:07
本帖最后由 张君 于 2013-3-21 19:09 编辑

public class Test     
{
        public static void leftshift(int i, int j)
        {
                   i+=j;
      System.out.println(i);     
        }
        public static void main(String args[])
        {
                      leftshift4,2);    //请问这个I的值为什么是4?//因为leftshift(i,j)里面的i,j都是局部变量,只在 leftshift(int i, int j)里面改变,而你定义的int i,是在主函数里,并不是直接赋值给leftshift(); 如果你是这样赋值的那样就是6啦
        }
}
  请问下面代码调用了函数leftshift为什么i的值没有改变还是4?
  还有加注释的地方代码打印不是先读主函数么,为什么打印的顺序是6和4而不是4和6?:jvm 加载进主函数后,先运行了leftshift(4,2) 这个方法自带syso(i),打印了6,然后主函数运行打印的是你定义的int i=4;


作者: 黄诗宾    时间: 2013-3-21 19:08
blackcaismine 发表于 2013-3-21 19:04
java中函数传递参数的方式都是传值。传递的是变量的内容,函数中的产生一个新的变量来接收参数的值,它们 ...

是先打印方法的输出语句后打印主函数的么?
作者: blackcaismine    时间: 2013-3-21 19:09
黄诗宾 发表于 2013-3-21 19:08
是先打印方法的输出语句后打印主函数的么?

是的,不然你可以试着吧主函数的println放在调用的方法前 就是4 6 了
作者: 黄诗宾    时间: 2013-3-21 19:11
O了 谢谢大家
作者: 江公亮    时间: 2013-3-21 19:16
在leftshift中的只是修改了i 的副本,离开了该方法,该副本就会被销毁,并不会对 i 造成影响!




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