static void f(String s)
{
s = "x";
}
public static void main(String[] args) {
String s = null;
f(s);
}为什么调用f(s)后s的值是null而不是"x"?
发布于 2011-12-16 09:13:58
因为s是一个引用。将该引用的副本传递给该方法,然后在该方法中修改该副本。原始版本不会改变。
发布于 2011-12-16 09:20:42
将对象变量传递给java中的函数时,它是通过引用传递的。如果您为函数中的对象分配了一个新值,那么您将覆盖传入的引用,而不会修改任何仍保留原始引用的调用代码所看到的值。
但是,如果执行以下操作,则将更新该值:
public class StringRef
{
public String someString;
}
static void f(StringRef s)
{
s.someString = "x";
}
public static void main(String[] args)
{
StringRef ref = new StringRef;
ref.someString = s;
f(ref);
// someString will be "x" here.
}发布于 2011-12-16 09:17:38
在函数f()中,值将是"x“。在此函数之外,s的值将为null。引用数据类型(如对象)是通过值传递的,请参阅here (请阅读“传递引用数据类型参数”一节)
https://stackoverflow.com/questions/8528710
复制相似问题