我知道java是按值返回而不是通过引用返回,因此它会创建对象的副本并传递新副本。返回语句也是如此吗? 是
return obj;
创建一个新的对象副本或简单地返回当前对象本身。
答案 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
时返回
复制值的唯一时间是使用主要类型时,例如int
,char
或double
答案 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
}