Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回对象在Java中是什么意思_Java_Object_Return - Fatal编程技术网

返回对象在Java中是什么意思

返回对象在Java中是什么意思,java,object,return,Java,Object,Return,我知道java是通过值而不是通过引用返回的,所以它创建对象的副本并传递新副本。return语句也是这样吗? 是吗 return obj; 创建一个新的对象副本或只是返回当前对象本身。因此它创建对象副本并传递新副本 不!它没有 按值返回是指返回obj引用中的值,如果obj指向某个对象,则从该返回方法收集返回值的其他引用也将指向与obj指向的同一对象 不,它不会创建另一个要返回的对象。因此它会复制该对象并传递新的副本 不!它没有 按值返回是指返回obj引用中的值,如果obj指向某个对象,则从该返回

我知道java是通过值而不是通过引用返回的,所以它创建对象的副本并传递新副本。return语句也是这样吗? 是吗

return obj;

创建一个新的对象副本或只是返回当前对象本身。

因此它创建对象副本并传递新副本

不!它没有

按值返回是指返回
obj
引用中的值,如果
obj
指向某个对象,则从该返回方法收集返回值的其他引用也将指向与
obj
指向的同一对象


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

因此它会复制该对象并传递新的副本

不!它没有

按值返回是指返回
obj
引用中的值,如果
obj
指向某个对象,则从该返回方法收集返回值的其他引用也将指向与
obj
指向的同一对象


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

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


它复制值的唯一时间是当您使用主要类型时,如
int
char
double
Java不复制对象,它将对象引用传递给方法,并在您使用
return


它复制值的唯一时间是当您使用主要类型时,如
int
char
double
它只返回当前对象本身。

它只返回当前对象本身。

您所说的更像是执行此类操作的
C++
。返回对象(非基本类型)时,将返回引用,并且不会创建新对象或执行复制

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

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

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

是否返回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
}
是否返回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
}

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

  • 标量变量包含值,所以您可以很容易地看到它们是通过值传递的

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


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

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

  • 标量变量包含值,所以您可以很容易地看到它们是通过值传递的

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


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

您说“我知道java是通过值而不是通过引用返回的,因此它会复制对象并传递新副本”。这完全是错误的。@jlordo:是的,你是对的。我可以说“它复制了对对象的引用,而不是对象本身”?你可以说“我知道java是通过值而不是引用返回的,所以它复制了对象并传递了新的副本”。这完全是错误的。@jlordo:是的,你是对的。我可以说“它复制了对对象的引用,而不是对象本身”?它返回了对对象的引用。不是对象本身。细微差别,影响巨大。它返回对对象的引用。不是对象本身。细微差别,影响巨大。