返回对象在Java中的含义是什么

时间:2013-01-24 11:42:17

标签: java object return

我知道java是按值返回而不是通过引用返回,因此它会创建对象的副本并传递新副本。返回语句也是如此吗? 是

return obj;

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

7 个答案:

答案 0 :(得分:7)

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

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

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

对于赋值,参数和返回值,上述情况属于(对于两种类型的变量)。

答案 1 :(得分:2)

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

没有!它没有!

按值返回表示返回obj引用中的值,如果obj指向某个对象,则从此返回方法收集返回值的其他引用也将指向同一对象正如obj指向的那样。

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

它只返回当前对象。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

答案 6 :(得分: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
}