首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java语言。参数不变

Java语言。参数不变
EN

Stack Overflow用户
提问于 2011-12-16 09:12:25
回答 5查看 554关注 0票数 1
代码语言:javascript
复制
static void f(String s)
{
    s = "x";
}

public static void main(String[] args) {
  String s = null;
  f(s);
}

为什么调用f(s)后s的值是null而不是"x"?

EN

回答 5

Stack Overflow用户

发布于 2011-12-16 09:13:58

因为s是一个引用。将该引用的副本传递给该方法,然后在该方法中修改该副本。原始版本不会改变。

票数 5
EN

Stack Overflow用户

发布于 2011-12-16 09:20:42

将对象变量传递给java中的函数时,它是通过引用传递的。如果您为函数中的对象分配了一个新值,那么您将覆盖传入的引用,而不会修改任何仍保留原始引用的调用代码所看到的值。

但是,如果执行以下操作,则将更新该值:

代码语言:javascript
复制
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.
}
票数 2
EN

Stack Overflow用户

发布于 2011-12-16 09:17:38

在函数f()中,值将是"x“。在此函数之外,s的值将为null。引用数据类型(如对象)是通过值传递的,请参阅here (请阅读“传递引用数据类型参数”一节)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8528710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档