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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄诗宾 高级黑马   /  2013-3-21 18:47  /  1981 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄诗宾 于 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?

评分

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

查看全部评分

7 个回复

倒序浏览
leftshift(i,j);   
这个方法内的i+=j;的值的改变只是方法里引用的值改变了,并没有把结果传回给外面的变量i,所以自然没有改变.
回复 使用道具 举报
java中函数传递参数的方式都是传值。传递的是变量的内容,函数中的产生一个新的变量来接收参数的值,它们两个是两个内容一样的不同变量,所以在函数中改变不会影响到原来的变量。   
至于为何是6 4 那是因为方法先被调用,方法中先println了,调用方法执行完才会接下来执行主函数的println 所以是 6  4

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 张君 于 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;

评分

参与人数 1技术分 +1 收起 理由
高境 + 1

查看全部评分

回复 使用道具 举报
blackcaismine 发表于 2013-3-21 19:04
java中函数传递参数的方式都是传值。传递的是变量的内容,函数中的产生一个新的变量来接收参数的值,它们 ...

是先打印方法的输出语句后打印主函数的么?
回复 使用道具 举报
黄诗宾 发表于 2013-3-21 19:08
是先打印方法的输出语句后打印主函数的么?

是的,不然你可以试着吧主函数的println放在调用的方法前 就是4 6 了
回复 使用道具 举报
O了 谢谢大家
回复 使用道具 举报
在leftshift中的只是修改了i 的副本,离开了该方法,该副本就会被销毁,并不会对 i 造成影响!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马