黑马程序员技术交流社区

标题: 小问题求解 [打印本页]

作者: 贾旭    时间: 2012-5-25 09:19
标题: 小问题求解
  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呢?有些晕了。求解

作者: niceBoy    时间: 2012-5-25 09:43
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());  
  }  
作者: 魏涞    时间: 2012-5-25 09:44
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

  }  

}  
作者: 黑马11期李项京    时间: 2012-5-25 09:47
本帖最后由 黑马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());  
  }  
}  

作者: 麦田守望者0812    时间: 2012-5-25 09:52
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.  }  


作者: 张頔    时间: 2012-5-25 21:08
之所以没有输出你想要输出的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:52
本帖最后由 杨永峰 于 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. }  
复制代码





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