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

public class Test1 {
        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);
        }
}
我是基础班的学生,请大神详细的解析。

33 个回复

正序浏览
值没有返回给主函数
回复 使用道具 举报
  1. class Test1
  2. {
  3.         public static int leftShift(int i, int j)
  4.         {
  5.                 return i+=j;
  6.         }
  7.         public static void main(String[] args)
  8.         {
  9.                 int i = 4;
  10.                 int j = 2;
  11.                 System.out.println(leftShift(i ,j));
  12.         }
  13. }
复制代码

楼主改成这样,才打印出来的是相加后的结果

回复 使用道具 举报
因为System.out.println(i),这句话只是打印了你初始化为4的i 的值,   leftShift()方法,根本没有返回值,运不运行,对这个结果没有影响..
回复 使用道具 举报
夜写意 发表于 2015-7-6 22:58
这个是基本数据类型的作用域问题。方法内的变量只对此方法的作用域内有效,不会影响到main函数内的i与j。 ...

补充下,如果传过去的是数组,对其的操作是有效的。
回复 使用道具 举报
传递进去的和你本身的并没有任何关系,你要是想有关系,就必须要加上静态修饰!这样传递的时候就可以保证了!
回复 使用道具 举报
这个是基本数据类型的作用域问题。方法内的变量只对此方法的作用域内有效,不会影响到main函数内的i与j。
回复 使用道具 举报
4L说的对。。
回复 使用道具 举报
你计算出6,是因为你错误的以为Test1这个方法有返回值,其实他没有返回值,所以呢main函数打印不出局部变量
回复 使用道具 举报
  1. public class Test1 {
  2.         public static void leftshift(int i, int j) {
  3.                 i+=j;
  4.                 System.out.println(i);
  5.         }
  6.        
  7.         public static void main(String args[]) {
  8.                 int i = 4, j = 2;
  9.                 leftshift(i, j);  
  10.         }
  11. }
复制代码


这个结果是6
回复 使用道具 举报
变量生命周期的问题
回复 使用道具 举报

class OperationDemo
{
      public static int leftshift(int i, int j) {
                   i+=j;
                                   return i;
        }
        public static void main(String args[]) {
                int i = 4, j = 2;
                i=leftshift(i, j);
                System.out.println(i);
        }
}
这样也可以
回复 使用道具 举报
public class Test1
        {
        public static void leftshift(int i, int j)
                {
                   i+=j;
                                   System.out.println(i);
        }
        public static void main(String args[])
                {
                int i = 4, j = 2;
                leftshift(i, j);
                 
        }
}
回复 使用道具 举报
看到各位大神的解答,感觉你们都好强啊,压力山大。
回复 使用道具 举报
public static void leftshif中void表示没有返回值,且leftshift中的成员变量为局部变量,主函数中的i的值是没有变化的!希望能帮助到你
回复 使用道具 举报
这个是方法特性的时候会讲,,在leftshift方法上以及方法内,i和j都是局部变量,超出这个范围就没有了
回复 使用道具 举报
test1方法没有返回值,在主函数中不能收到i的返回值,所以在主函数中定义i=4,输出就是4
回复 使用道具 举报
巴拉森 发表于 2015-7-5 22:24
如果局部变量有  I类型  那么就会在局部变量 来找这个I  ;main 是一个主方法  ,所以打印的是I ...

如果局部方法有  I类型  那么就会在局部方法 来找这个I  ;main 是一个主方法  ,所以打印的是I
回复 使用道具 举报
如果局部变量有  I类型  那么就会在局部变量 来找这个I  ;main 是一个主方法  ,所以打印的是I
回复 使用道具 举报
(个人理解)int定义的对象的值存在栈中,所以参数得到的只是值而已,如果用存在堆中的对象,那么参数得到的就是地址
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马