【问题标题】:Java c++ Reference questionJava c++参考问题
【发布时间】:2011-01-06 08:47:48
【问题描述】:

在 c++ 中,我们使用 & 来表示按引用传递。由于对象总是通过引用传递,因此您不需要使用 &?还是没关系?

java 和 c++ 在传递值和引用方面有何不同。我认为java中的所有内容都是通过引用传递但它是通过值传递?为什么是这样?那么基元是按值传递而类对象是按引用传递的吗?

【问题讨论】:

  • 这个answer 到另一个question 可能包含您想知道的大部分内容。

标签: java c++


【解决方案1】:

把两件事弄清楚:

  1. C++ 默认是按值传递,你必须明确指出你的函数是否接受& 的引用
  2. Java 总是按值传递(对象不是按引用传递,但引用按值传递 - 即它是一个副本对对象的引用 - 因此您可以使用该引用修改对象,但您不能期望像交换[一个引用与另一个引用]这样的操作正常工作)

【讨论】:

  • 将 Java 中的所有对象变量视为等同于 C++ 指针会很有帮助。这就是他们的处理方式。
【解决方案2】:

我之前在 C++ 参数传递语义上写了一个详细的答案,其中包括关于 Java 语义如何不同的最后一节。你可以阅读它here

基本上,把数组放在一边(更多关于数组here),因为它们是不同的野兽。在 C++ 中,如果参数类型不包含 &,则按值传递(复制)。如果该类型包含一个*,那么它就是一个指针,并且它是被复制的指针,但是执行了一个复制。

在 Java 中,使用引用类型,您永远不会使用实际对象,而是使用对它的引用(C/C++ 方言中的指针)。所有参数都按值传递,这意味着引用将被复制(该函数将无法修改调用者的引用),但可以通过复制的引用修改被引用的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2018-05-13
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    相关资源
    最近更新 更多