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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾旭 中级黑马   /  2012-5-25 09:19  /  1687 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Test{  
  2. public static void add3(Integer i){  
  3.   int var=i.intValue();  
  4.   var=var+2;  
  5.   i=new Integer(var);  
  6.   }  
  7.   public static void main(String args[]){  
  8.           Integer i=new Integer(0);  
  9.           add3(i);  
  10.           System.out.println(i.intValue());  
  11.   }  
  12. }  
复制代码
为什么结果不是2呢?怎么是0呢?有些晕了。求解

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
public static void add3(Integer i){  //这个i跟里面mian里面i有什么关系呢,只是在方法里的局部变量而已
  int var=i.intValue();                  
//局部变量随方法结束而消失。
  var=var+2;  
  i=new Integer(var);  
  }  
  public static void main(String args[]){  
          Integer i=new Integer(0);  
          add3(i);  
          System.out.println(i.intValue());  
  }  
回复 使用道具 举报
public class Test{  

public static void add3(Integer i){  

  int var=i.intValue();  

  var=var+2;  

  i=new Integer(var);  

  }  

  public static void main(String args[]){  

          Integer i=new Integer(0);   

          add3(i);    //这是局部变量生存周期的问题,虽然形式参数和实际参数的名字一样,但他们的生存周期不一样,这里的实际参数传入0,在add3()中得到的结果是2,但方法结束后,该方法内的局部变量就消失了,


          System.out.println(i.intValue());   //这里的i还是主方法中的i

  }  

}  

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 淡定

查看全部评分

回复 使用道具 举报
本帖最后由 黑马11期李项京 于 2012-5-25 10:04 编辑

很简单,如果你把 add3(i);  变成i= add3(i);  结果就是2了,
代码如下:
public class Test{  
public static int add3(Integer i){  
  int var=i.intValue();  
  var=var+2;  
  i=new Integer(var);  
  return i;
  }  
       
  public static void main(String args[]){  
          Integer i=new Integer(0);  
          i = add3(i);  
          System.out.println(i.intValue());  
  }  
}  
回复 使用道具 举报
01.public class Test{  

02.public static void add3(Integer i){  

03.  int var=i.intValue();  

04.  var=var+2;  

05.  i=new Integer(var);  

06.  }  

07.  public static void main(String args[]){  

08.          Integer i=new Integer(0);  

09.          add3(i);       //该方法并不会影响main()函数中I 的值

10.          System.out.println(i.intValue());  

11.  }  

回复 使用道具 举报
之所以没有输出你想要输出的2 有两个原因
第一 add3()方法没有返回值
第二 就是有返回值你也没有吧返回值付给i 修改代码如下
public class string {  

public static int  add3(Integer i){  

  int var=i.intValue();  

  var=var+2;  

  i=new Integer(var);  
  return i;
  }  

  public static void main(String args[]){  

          Integer i=new Integer(0);  

          i=add3(i);  

         System.out.println(i.intValue());  

  }  

}
回复 使用道具 举报
本帖最后由 杨永峰 于 2012-5-25 22:54 编辑

方法调用时参数传递问题,不同的对象作为参数传递,情况有所不同,上述情况分析:
  1. public class Test{
  2.          //add();中接受的参数变量j与所定义的符号无关,可以和发送的参数名相同。类型必须一致。
  3.         public static void add(Integer j){  //add3(i);执行时,在该方法内存中新建j变量,指向 main()函数中创建的Integer对象(堆),也就是将i的值复制给j;
  4.                 int var = j.intValue();  // var 变量和被赋予的值都在add()方法的内存中。
  5.                 var= var + 2;  
  6.                 j =new Integer(var);  // add()所属内存中完成新建对象和赋值,与main()中的i无半毛关系。
  7.           }  
  8.         public static void main(String args[]){  
  9.                           Integer i=new Integer(5);  // 这种定义方式会在堆内存中创建一个 Integer 对象,i在main()方法栈内存,存放指向 Integer对象(堆)的地址
  10.                           add(i);  // add();方法入栈,开始执行。
  11.                           System.out.println(i.intValue());  
  12.         }  
  13. }  
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马