为了账号安全,请及时绑定邮箱和手机立即绑定

关于Java引用传递

关于Java引用传递

蛊毒传说 2019-08-02 07:02:35
Java引用传递这两个代码之间有什么区别:代码A:Foo myFoo;myFoo = createfoo();哪里public Foo createFoo(){    Foo foo = new Foo();    return foo;}相对于。代码B:Foo myFoo;createFoo(myFoo);public void createFoo(Foo foo){    Foo f = new Foo();    foo = f;}这两个代码之间有什么区别吗?
查看完整描述

3 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

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


让我通过一个:

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. 声明名为f类型Foo并将其分配给一个新的类型对象。Foo带有属性"f".

    Foo f = new Foo("f");


  2. 从方法方面来说,是类型的引用。Foo有名字a被声明,并且它最初被分配给null.

    public static void changeReference(Foo a)


  3. 正如您所称的方法changeReference,参考文献a将分配给作为参数传递的对象。

    changeReference(f);


  4. 声明名为b类型Foo并将其分配给一个新的类型对象。Foo带有属性"b".

    Foo b = new Foo("b");


  5. a = b正在重新分配引用。af属性为"b".



  6. 如你所言modifyReference(Foo c)方法,引用c被创建并分配给具有属性的对象。"f".


  7. c.setAttribute("c");将更改引用对象的属性。c指向它,与引用的对象相同f指着它。


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




查看完整回答
反对 回复 2019-08-03
?
莫回无

TA贡献1865条经验 获得超7个赞

因为Java严格地“按值传递”,甚至对象的引用也是通过值传递的,所以第二段代码将不能像预期的那样工作。请参阅“相关”一节。不计其数关于这个的讨论。



查看完整回答
反对 回复 2019-08-03
?
HUWWW

TA贡献1874条经验 获得超12个赞

将方法参数视为自己的变量声明..如果要用单个代码块替换方法调用,则如下所示:

Foo myFoo;{                      //Method call starts here
    Foo foo;
    foo = myFoo;
    Foo f = new Foo();
    foo = f;}                      //Method call ends here

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




查看完整回答
反对 回复 2019-08-03
  • 3 回答
  • 0 关注
  • 305 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信