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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夜hen冷 中级黑马   /  2014-12-8 10:26  /  1733 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test      
{
         publicstatic void leftshift(int i, int j)
         {
               i+=j;
         }
         publicstatic void main(String args[])
         {
                   inti = 4, j = 2;
                   leftshift(i,j);
                   System.out.println(i);//4  leftShift函数没关系。
         }
}

17 个回复

倒序浏览
你定义了两个变量i,j,leftshift(i,j)是将变量传到函数中运行“i+=j;”这句话。但是你的函数并没返回运行结果。i不是成员变量,所以值依然为4。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
记住函数调用参数是传值。
回复 使用道具 举报
i+=j;这句话它的i地址始终没有,变化的只是i对应的变量值,你打印i只能打印他的地址值对应的变量值
回复 使用道具 举报
非引用型数据类型 在函数参数传递过程是值传递。

主函数里的 i 在进入内存中是在栈内存中开辟出来了为4
执行到leftshift(int i, int j)函数时,也在栈内存中开辟出新的空间,
同时函数的两个参数也在该空间分配新的空间,所以函数的参数int i 就是函数leftshift里的局部变量,修改也是修改函数内i变量的值,在函数执行完后释放内存,该i也不存在了,所以与外面的i是无关的。

回复 使用道具 举报
静态方法只能使用静态成员
回复 使用道具 举报
zhaozhao 发表于 2014-12-8 10:37
你定义了两个变量i,j,leftshift(i,j)是将变量传到函数中运行“i+=j;”这句话。但是你的函数并没返回运行结 ...

讲解的很详细,看完后我已经明白了,谢谢
回复 使用道具 举报
kerner 发表于 2014-12-8 10:56
记住函数调用参数是传值。

能不能再给详细的介绍一下,听着不是很懂
回复 使用道具 举报
眸眼前缘 发表于 2014-12-8 11:01
i+=j;这句话它的i地址始终没有,变化的只是i对应的变量值,你打印i只能打印他的地址值对应的变量值 ...

能不能举例说明一下
回复 使用道具 举报
lwh316658735 发表于 2014-12-8 11:31
非引用型数据类型 在函数参数传递过程是值传递。

主函数里的 i 在进入内存中是在栈内存中开辟出来了为4

这两个i是不是同一个,如果不是那么都在栈中,他们是怎么区分的
回复 使用道具 举报
本帖最后由 lwh316658735 于 2014-12-8 15:09 编辑
夜hen冷 发表于 2014-12-8 13:16
这两个i是不是同一个,如果不是那么都在栈中,他们是怎么区分的

不是同一个
         publicstatic void leftshift(int i, int j)

         {

               i+=j;

         }
这个方法你可以理解成这样
         publicstatic void leftshift(int a, int j)

         {
               int i=0;
               i=a+j;

         }
函数里的变量作用范围只能再函数内。
leftshift 里的int i 和main里的 int i 是没有任何关系的。
就等于两个不同的班有两个名字一样的人 A,不管是哪个班的老师叫A过去一趟 都是指本班的吧。
回复 使用道具 举报
你返回的是i的值啊,i又没有变。
回复 使用道具 举报
两个i分别定义在两个不同的方法中,各自在自己定义的方法中有效,别被名字迷惑
回复 使用道具 举报
i=4    j = 2,是因为,你虽然传的是实参,但是你没有返回值,而在方法里面定义的i的作用域结束于方法的大括号,而你输出的i是主函数定义的变量。两者都没有关系,所以就不会改变值。如果你想改变值,那么就可以写个返回值让主函数里面的i接收,或者把i定义为全局变量。
回复 使用道具 举报
调用的leftshift函数没有返回值。
回复 使用道具 举报
两个函数的值不会影响,而且没有返回值。
回复 使用道具 举报
调用完函数之后并没有返回值对i或j作修改,所以输出结果还是跟之前一样
回复 使用道具 举报
大哥,没有返回值。。。。  publicstatic int leftshift(int i, int j)

         {

              return i+=j;

         }
就好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马