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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 鹰击长空168 中级黑马   /  2015-1-8 22:41  /  1881 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test      
{
                  public static void leftshift(int i, int j)
                  {
                         i+=j;
                   }
                  public static void main(String [  ]  args)
                  {
                          int i = 4, j = 2;
                          leftshift(i, j);
                          System.out.println(i);
                   }
}

评分

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

查看全部评分

18 个回复

倒序浏览
你虽然调用了leftShit()但并没有返回值,计算的只是两个形参,没有对i重新赋值,所以打印的i还是i=4
回复 使用道具 举报
你在main输出的main的i值,i的值为4, 你调用leftshift()方法并不会改变main中i的值
回复 使用道具 举报 1 0
随影 发表于 2015-1-8 22:49
你虽然调用了leftShit()但并没有返回值,计算的只是两个形参,没有对i重新赋值,所以打印的i还是i=4 ...

意思是调用后,栈内存释放,i值未变?
回复 使用道具 举报
lwj123 发表于 2015-1-8 22:51
你在main输出的main的i值,i的值为4, 你调用leftshift()方法并不会改变main中i的值 ...

不怎么理解你的意思啊
回复 使用道具 举报
就是这个意思,如果操作的是数组或者其他引用类型变量,即使没有返回值也会变的。
回复 使用道具 举报
那个方法没有返回值 ,只是运行了方法,所以 i 的值没改变
回复 使用道具 举报 1 0
没返回值,调用的方法等于没用啊
回复 使用道具 举报 1 0
因为都是局部变量,互相几乎没有关系。
回复 使用道具 举报 1 0
只是变量名称一样 在内存中是两块不同的空间。main方法里i的值没有变
回复 使用道具 举报 1 0
这样理解就好了,main函数里有个 i, leftshift也有个形参 i,二者是独立的,调用函数的时候只是把main里的i的值赋给了leftshift里i

评分

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

查看全部评分

回复 使用道具 举报
你在调用leftshift方法的时候,你往里传的是你在主函数定义的两个变量 i和j的值,传进去的是一个4和2,不是主函数里的 i和j,他们是引用,不是值。所以leftshift和main里的i根本不是一个引用。两个函数里的i就没什么关系了。
回复 使用道具 举报
kakasa 发表于 2015-1-9 00:21
你在调用leftshift方法的时候,你往里传的是你在主函数定义的两个变量 i和j的值,传进去的是一个4和2,不是 ...

很有道理哦
回复 使用道具 举报
i+= j ,是局部变量,也就是i作用范围只在leftshift之内,而你输出的是全局变量i.
回复 使用道具 举报 1 0
这个是因为啥呢!又有人已经给你解答了!我就再多啰嗦两句!!
主要考察返回值这块儿知识点!主方法中调用了静态方法!按理来说通常会直接按照  i=4+2=6。但是要注意的是,所调用的静态方法是一个void!!void!!无返回值!!意思就是在这个无返回值的方法中,无论怎么运算,仅限于在本方法中运算,并没有返回给主方法,虽然主方法中调用了这个静态方法!由于无返回值,所以i+=j;这个语句没有被返回!!所以输出的i还是类体中声明的i,值是4
回复 使用道具 举报 1 0
这还用说吗 不是4才假来 你打印的就是4
回复 使用道具 举报
学习了。
回复 使用道具 举报
public class RegexTest1 {
           public static int leftshift(int ii, int jj)
       {
              ii+=jj;
              return ii;
        }
       public static void main(String [  ]  args)
       {
               int i = 4, j = 2;
               
               System.out.println(leftshift(i, j));
               System.out.println(i);
        }
}
改成这样不就容易看明白了,leftshift方法和main方法中的2个变量是不同变量,别因为写成同名就是一个变量了
回复 使用道具 举报
这两个函数中的i在栈内存中的地址不同个,你操作的都是局部变量,并未对主函数中的i进行操作。
第一:java方法基本数据类型是传值,对象类型传引用,这是千真万确的。

  第二:当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。

  第三:当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马