Topic: 请高人解答

  Print this page

1.请高人解答 Copy to clipboard
Posted by: satre
Posted on: 2003-08-25 03:04

public class q101
{
  public static void add3(Integer i)
  {
    int val = i.intValue();
    val += 3;
    i = new Integer(val);
  }
  
  public static void main(String args[])
  {
    Integer i = new Integer(0);
    add3(i);
    System.out.println(i.intValue());
  }
}

为什么结果是0,而不是3?

2.Re:请高人解答 [Re: satre] Copy to clipboard
Posted by: jacob
Posted on: 2003-08-25 10:16

这也太明显了把....?
reference....

3.Re:请高人解答 [Re: satre] Copy to clipboard
Posted by: penzheng
Posted on: 2003-08-25 11:34

i = new Integer(val);
当你new的时候已不是原来的指针了

4.Re:请高人解答 [Re: satre] Copy to clipboard
Posted by: mingaik
Posted on: 2003-08-25 15:52

Variable is pass by value not by reference. So variable "i" remain unchange after calling the function.

5.Re:请高人解答 [Re: satre] Copy to clipboard
Posted by: maolu
Posted on: 2003-08-25 16:08

public static void add3(Integer i)中的参数是Reference(传参照),不是传地址。太简单了!!

6.Re:请高人解答 [Re: maolu] Copy to clipboard
Posted by: penzheng
Posted on: 2003-08-25 16:32

怎末那末多土人,传reference难道不是地址吗。是不是学计算机的。

7.Re:请高人解答 [Re: penzheng] Copy to clipboard
Posted by: helloworld
Posted on: 2003-08-25 21:16

有没有说得明白的,不要说简单一类的话.

8.Re:请高人解答 [Re: satre] Copy to clipboard
Posted by: satre
Posted on: 2003-08-25 23:20

Integer i, i就是一个reference. 是传参而不是传值. 我的困惑在于函数是传参,在子函数里修改了
i 的地址 (i=new Integer(3)), 那么从子函数里出来,i也应该把改变的值传出来. 哪里不对了吗? 谢谢

9.Re:请高人解答 [Re: satre] Copy to clipboard
Posted by: satre
Posted on: 2003-08-25 23:34

penzheng 说的有道理,好象有些懂了.

10.Re:请高人解答 [Re: satre] Copy to clipboard
Posted by: hwx
Posted on: 2003-08-28 11:16

你要搞清楚,在add3方法内部的那个变量 i ,其实只是add3方法中的局部变量
而已。i 重新赋值后它指向一个新Integer对象的reference,而原来方法外部
的 i (在main方法中那个)并未受到任何修改,打印结果当然还是0。

另外,Integer属于value object,是Immutable的类型,
象你这样用一个方法传参进去修改Integer的Value恐怕是不可能的。
要改的话,只能在main方法中:
Integer i = new Integer(0);
i = new Integer(add3(i.intValue()));
System.out.println(i.intValue());
另外,add3改为:
public static int add3(int i) {
return i + 3;
}
这样,在main方法中打印结果为3。


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923