作者walm20 (New CygnusX)
看板java
标题[问题] call by ref
时间Wed Dec 10 14:57:31 2008
我的问题如下注解部份:
class A{
}
public class Test{
public static void f(A b)
{
b=new A();
}
public static void main(String[] a)
{
A b=null;
f(b); //为什麽执行完这行b还是null?
}
}
先谢啦
目前想到的解法: (若一定要透过function f来new的话)
若变数要在main一开始就宣告,而随着得到更多的资讯来new A()
则只能把 f之return type改成A
藉由return new A();来达成
--
我的露天拍卖:
http://tinyurl.com/6z4rw7
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.118.126.177
1F:推 kimkao:void f(A b)底下的b=new A();存活scope只在void f()里面 12/10 17:21
可是...我对於variable的scope又做了以下测试
http://gist.github.com/34301
如果依照kimkao大所说来看
感觉又好像怪怪的
执行完Matrix的ctor
m就无效了吧?
回到原本问题
我觉得是
很像C里面的call by value
例子如下:
void f(int *p)
{
p=new int (5);
*p=10;
}
void main()
{
int a=5;
int *ptr=&a;
f(ptr); //执行完这行 a还是5
}
※ 编辑: walm20 来自: 140.118.126.177 (12/10 19:00)
2F:推 hsnucsc:我实际执行完f(ptr) a是10吧 @@ 12/10 19:49
3F:→ walm20:确定是5 12/10 20:17
4F:推 hsnucsc:是5 我错了 12/10 20:41
※ 编辑: walm20 来自: 140.118.126.177 (12/10 21:23)
5F:推 adrianshum:java 只有 pass-by-value. 观念清楚就不难明白 12/11 16:04
6F:推 Lordaeron:定义问题, 跟观念无关. 12/12 20:55