1

Java は参照ではなく値によって返されることを知っているので、オブジェクトのコピーを作成し、新しいコピーを渡します。これは return ステートメントにも当てはまりますか? は

return obj;

新しいオブジェクトのコピーを作成するか、単に現在のオブジェクト自体を返します。

4

7 に答える 7

7

いいえ、これは間違った仮定です。Java がすべてを値渡しするのは事実ですが、これは次のことを意味します。

  • スカラー変数には値が含まれているため、値渡しであることが簡単にわかります。

  • 一方、オブジェクト変数にはオブジェクトは含まれません。オブジェクトへの疑似アドレスが含まれていると考えることができます。その疑似アドレスは (値によって) コピーされますが、依然として同じオブジェクトを指しています。(オブジェクトは、実際にはnewエクスプレッションのみを使用して作成されます。)

上記は、割り当て、引数、および戻り値について(両方のタイプの変数に対して)当てはまります。

于 2013-01-24T11:45:52.490 に答える
2

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

いいえ!そうではありません!

obj値による戻りとは、参照の値が返されることを意味しobjます。オブジェクトを指している場合、この戻りメソッドから戻り値を収集する他の参照も、指しているオブジェクトと同じオブジェクトをobj指します。

いいえ、別のオブジェクトを作成して返すことはありません。

于 2013-01-24T11:43:51.203 に答える
1

現在のオブジェクト自体を返すだけです。

于 2013-01-24T11:44:41.333 に答える
1

あなたの言うことは、そのようなC++ことをすることのようなものです。オブジェクト (非基本型) を返すときは、参照を返し、新しいオブジェクトを作成したり、コピーを実行したりしません。

于 2013-01-24T11:44:52.387 に答える
1

Java では、原子型 (char、int、long など) は値によって返されます。オブジェクトは常に参照によって返されます (複製なし)。

于 2013-01-24T11:44:53.867 に答える
1

return obj;新しいオブジェクトを作成すると、現在のオブジェクト自体がコピーまたは返されますか?

-->objは、ヒープ上の実際のオブジェクトを指すオブジェクト参照です。return を割り当てているメソッドで、新しいオブジェクト参照 (作成者による) が作成されます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
}
于 2013-01-24T11:45:31.673 に答える
1

Javaはオブジェクトをコピーせず、オブジェクト参照をメソッドに渡し、使用時にそれを返しますreturn

値をコピーするのは、intcharまたはdouble

于 2013-01-24T11:43:52.923 に答える