java - 按引用对象与按值引用

标签 java pass-by-reference pass-by-value

我在这里阅读了这条评论:Passing a String by Reference in Java?

Yes, it's a misconception. It's a huge, widespread misconception. It leads to an interview question I hate: ("how does Java pass arguments"). I hate it because roughly half of the interviewers actually seem to want the wrong answer ("primitives by value, objects by reference"). The right answer takes longer to give, and seems to confuse some of them. And they won't be convinced: I swear I flunked a tech screen because the CSMajor-type screener had heard the misconception in college and believed it as gospel. Feh. – CPerkins Aug 13 '09 at 14:34

有人可以用新程序员可以理解的术语解释一下:

“在 Java 中,原语按值传递,对象按引用传递。”

和:

“在 Java 中,没有任何东西是通过引用传递的,而引用是通过值传递的。”?

从某种意义上说,这两种说法都是正确的吗?我不想引起一场激烈的争论,但这听起来像是一个非常重要的概念,但我仍然不完全理解。

最佳答案

我认为误解在于变量不能包含对象。如果你明白这一点,那么显然变量只能包含对对象(或原始值)的引用。从那里到实现引用按值传递(就像原始值一样)的步骤非常小。

您可以通过一个非常简单的测试来确定一种语言是否支持通过引用传递。问问自己是否可以用该语言编写一个交换函数,即像

x == A, y == B

swap(x, y);

x == B, y == A

作为 Java 程序员,您很快就会意识到您不能在 Java 中实现这一点,因此您(正确地)得出结论,Java 没有通过引用传递.

回到你的句子:

  • 在 Java 中,原语按值传递,对象按引用传递。

这是错误的。我认为你只能传递包含在变量中的东西,正如我上面所说的,变量不能包含对象,因此你根本不能在 Java 中传递对象。

  • 在 Java 中,没有任何东西是通过引用传递的,而引用是通过值传递的。

这是正确的

关于java - 按引用对象与按值引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9468069/

相关文章:

Java Socket.setSoTimeout() 在连接时不会超时

Java 与 Scala 泛型和装箱的互操作性问题

java - EntityListener 是否在同一个线程中运行?

pass-by-reference - Smalltalk 程序内存不足;通过引用问题?

C:动态分配时通过引用传递

java - 如何应对无法通过引用传递?

java - 如何使用 JSOUP java 获取谷歌搜索的第一个标题和网址?

python - python函数调用后变量的意外变化

swift - Swift 是按值传递还是按引用传递

Rcpp 和 R : pass by reference