【问题标题】:What does return object means in JavaJava中的返回对象是什么意思
【发布时间】:2013-01-08 03:53:33
【问题描述】:

我知道 java 是按值而不是按引用返回的,所以它会复制对象并传递新的副本。 return 语句也是这种情况吗?

return obj;

创建一个新的对象副本或简单地返回当前对象本身。

【问题讨论】:

  • 你说“我知道java是按值而不是按引用返回的,所以它会复制对象并传递新的副本”。这是不正确的。
  • @jlordo:是的,你是对的。我可以说“它会复制对对象的引用而不是对象本身”吗?

标签: java object return


【解决方案1】:

return obj; 是创建一个新的对象副本还是返回当前对象本身?

--> obj 是一个指向堆上实际对象的对象引用。新对象引用(由您)将在您分配返回的obj 的方法中创建。

Object method() {
  //....
  return obj;
}

void methodA() {
  Object objA = method(); // obj and objA are different because of their scopes but values are same(assigned to objA). That's why both points to the same Object on heap
}

【讨论】:

    【解决方案2】:

    不,这是一个错误的假设。 Java 确实通过值传递所有内容,但这意味着以下内容:

    • 标量变量包含值,因此您可以很容易地看到它们是按值传递的。

    • 另一方面,对象变量不包含对象。您可以将它们视为包含对象的伪地址。该伪地址被复制(按值),但它仍然指向同一个对象。 (对象实际上只使用new 表达式创建。)

    以上对于赋值、参数和返回值都是正确的(对于两种类型的变量)。

    【讨论】:

      【解决方案3】:

      so it makes a copy of the object and passes the new copy

      不!它没有!

      按值返回是指返回obj引用中的值,如果obj指向某个对象,那么从该返回方法中收集返回值的其他引用也将指向与@987654324相同的对象@ 指向。

      不,它不会创建另一个要返回的对象。

      【讨论】:

        【解决方案4】:

        在 java 中,原子类型(char、int、long 等)按值返回。对象总是通过引用返回(不克隆)。

        【讨论】:

          【解决方案5】:

          你说的更像是C++做这些事情。当您返回一个对象(非基本类型)时,您将返回一个引用,并且您不会创建新对象或执行复制。

          【讨论】:

            【解决方案6】:

            它只是返回当前对象本身。

            【讨论】:

            • 它返回对对象的引用。不是对象本身。细微的差别,却有着巨大的影响。
            【解决方案7】:

            Java 不会复制对象,它会将对象引用传递给方法,并在您使用return 时返回它

            它复制值的唯一时间是在您使用主要类型时,例如 intchardouble

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-03-14
              • 2018-06-09
              • 2015-05-21
              • 2015-07-07
              • 2017-08-13
              • 2018-01-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多