首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java按引用传递

Java按引用传递
EN

Stack Overflow用户
提问于 2012-02-23 07:03:24
回答 4查看 36.6K关注 0票数 32

这两个代码的区别是什么:

代码A:

代码语言:javascript
复制
Foo myFoo;
myFoo = createfoo();

哪里

代码语言:javascript
复制
public Foo createFoo()
{
   Foo foo = new Foo();
   return foo;
}

Vs.代码B:

代码语言:javascript
复制
Foo myFoo;
createFoo(myFoo);

public void createFoo(Foo foo)
{
   Foo f = new Foo();
   foo = f;
}

这两段代码有什么不同吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-23 07:11:57

Java总是通过值传递参数,而不是通过引用。

让我通过example来解释这一点

代码语言:javascript
复制
public class Main
{
     public static void main(String[] args)
     {
          Foo f = new Foo("f");
          changeReference(f); // It won't change the reference!
          modifyReference(f); // It will modify the object that the reference variable "f" refers to!
     }
     public static void changeReference(Foo a)
     {
          Foo b = new Foo("b");
          a = b;
     }
     public static void modifyReference(Foo c)
     {
          c.setAttribute("c");
     }
}

我将分步骤对此进行解释:

  1. 声明了一个名为fFoo类型的引用,并将其分配给一个具有"f"属性的Foo类型的新对象。

Foo f= new Foo("f");

  1. 在方法端,声明了一个类型为Foo的引用,并将其命名为a,并将其初始分配给null

static void changeReference(Foo a) (公共静态无效设置(Foo A)公共静态无效设置

  1. 当您调用方法changeReference时,引用a将被分配给作为参数传递的对象。

changeReference(f);

  1. 声明了一个名为bFoo类型的引用,并将其分配给一个具有"b"属性的Foo类型的新对象。

Foo b=新Foo("b");

  1. a = b正在为其属性为"b".

的对象重新分配引用a而不是f

当您调用modifyReference(Foo c)方法时,将创建一个引用c,并将其分配给具有"f".属性的对象

  1. c.setAttribute("c");将更改引用c指向它的对象的属性,而引用f指向它的对象也是这个对象。

我希望您现在了解如何在Java中将对象作为参数进行传递:)

票数 198
EN

Stack Overflow用户

发布于 2012-02-23 07:06:18

由于Java是严格的“按值传递”,甚至对对象的引用也是按值传递的,因此第二个代码将无法按预期工作。请参阅右侧的“相关”部分,了解有关这方面的大量讨论。

票数 10
EN

Stack Overflow用户

发布于 2012-02-23 08:05:56

将方法参数看作是它们自己的变量声明。如果将方法调用替换为单个代码块,则如下所示:

代码语言:javascript
复制
Foo myFoo;
{                      //Method call starts here
    Foo foo;
    foo = myFoo;
    Foo f = new Foo();
    foo = f;
}                      //Method call ends here

即使该方法参数与另一个变量具有相同的名称,该方法参数仍然是它自己的唯一引用,只有该方法知道。这和Eng.Fouad上面说的是一样的。

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

https://stackoverflow.com/questions/9404625

复制
相关文章

相似问题

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