黑马程序员技术交流社区

标题: 为何结果是4? [打印本页]

作者: 鹰击长空168    时间: 2015-1-8 22:41
标题: 为何结果是4?
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);
                   }
}
作者: 随影    时间: 2015-1-8 22:49
你虽然调用了leftShit()但并没有返回值,计算的只是两个形参,没有对i重新赋值,所以打印的i还是i=4
作者: lwj123    时间: 2015-1-8 22:51
你在main输出的main的i值,i的值为4, 你调用leftshift()方法并不会改变main中i的值
作者: 鹰击长空168    时间: 2015-1-8 22:52
随影 发表于 2015-1-8 22:49
你虽然调用了leftShit()但并没有返回值,计算的只是两个形参,没有对i重新赋值,所以打印的i还是i=4 ...

意思是调用后,栈内存释放,i值未变?
作者: 鹰击长空168    时间: 2015-1-8 22:57
lwj123 发表于 2015-1-8 22:51
你在main输出的main的i值,i的值为4, 你调用leftshift()方法并不会改变main中i的值 ...

不怎么理解你的意思啊
作者: 随影    时间: 2015-1-8 22:57
就是这个意思,如果操作的是数组或者其他引用类型变量,即使没有返回值也会变的。
作者: 潘耿威    时间: 2015-1-8 23:01
那个方法没有返回值 ,只是运行了方法,所以 i 的值没改变
作者: LOVEQIAN    时间: 2015-1-8 23:02
没返回值,调用的方法等于没用啊
作者: wtjohn    时间: 2015-1-8 23:04
因为都是局部变量,互相几乎没有关系。
作者: zhengyijun    时间: 2015-1-8 23:37
只是变量名称一样 在内存中是两块不同的空间。main方法里i的值没有变
作者: 魅影惊鸿    时间: 2015-1-8 23:43
这样理解就好了,main函数里有个 i, leftshift也有个形参 i,二者是独立的,调用函数的时候只是把main里的i的值赋给了leftshift里i
作者: 鹰击长空168    时间: 2015-1-9 00:28
kakasa 发表于 2015-1-9 00:21
你在调用leftshift方法的时候,你往里传的是你在主函数定义的两个变量 i和j的值,传进去的是一个4和2,不是 ...

很有道理哦
作者: 碎流    时间: 2015-1-9 00:56
i+= j ,是局部变量,也就是i作用范围只在leftshift之内,而你输出的是全局变量i.
作者: 励志Java_鸿政    时间: 2015-1-9 01:17
这个是因为啥呢!又有人已经给你解答了!我就再多啰嗦两句!!
主要考察返回值这块儿知识点!主方法中调用了静态方法!按理来说通常会直接按照  i=4+2=6。但是要注意的是,所调用的静态方法是一个void!!void!!无返回值!!意思就是在这个无返回值的方法中,无论怎么运算,仅限于在本方法中运算,并没有返回给主方法,虽然主方法中调用了这个静态方法!由于无返回值,所以i+=j;这个语句没有被返回!!所以输出的i还是类体中声明的i,值是4
作者: xiao_jian    时间: 2015-1-9 08:55
这还用说吗 不是4才假来 你打印的就是4
作者: 银离子    时间: 2015-1-9 16:45
学习了。
作者: 詹岳伟    时间: 2015-1-9 17:16
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个变量是不同变量,别因为写成同名就是一个变量了
作者: 邓士林    时间: 2015-1-9 17:28
这两个函数中的i在栈内存中的地址不同个,你操作的都是局部变量,并未对主函数中的i进行操作。
第一:java方法基本数据类型是传值,对象类型传引用,这是千真万确的。

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

  第三:当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容




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