加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – C:按值传递对象的原因

发布时间:2020-12-15 02:07:37 所属栏目:Java 来源:网络整理
导读:在 Java中,包含适当对象的所有变量实际上都是引用(即指针).因此,使用这些对象作为参数的方法调用始终是“通过引用”.调用修改对象状态的方法也会影响原始对象(在调用者端). C是不同的:这里的参数可以通过值传递或通过引用传递.在通过值传递的对象上调用muta
在 Java中,包含适当对象的所有变量实际上都是引用(即指针).因此,使用这些对象作为参数的方法调用始终是“通过引用”.调用修改对象状态的方法也会影响原始对象(在调用者端).

C是不同的:这里的参数可以通过值传递或通过引用传递.在通过值传递的对象上调用mutator方法会使原始对象不受影响. (我想按值调用会创建对象的本地副本).

所以我对此的第一反应 – 从Java到C – 是:当使用对象作为参数时,总是使用指针.这给了我从Java期望的行为.

但是,如果一个人不需要修改方法体中的对象,也可以使用“按值调用”.是否有人想要这样做?

解决方法

ALWAYS use pointers when using objects as arguments

不,在C中总是通过引用传递,除非可以使用nullptr作为有效参数调用函数.如果函数不需要修改参数,则传递const引用.

按值传递参数有几种用途.

如果您的函数需要创建参数的副本,最好通过传递值而不是在函数内创建副本来创建此副本.例如:

void foo( widget const& w )
{
  widget temp( w );
  // do something with temp
}

而是使用

void foo( widget w )  // copy is made here
{
  // operate on w itself
}

这样做的好处还在于,如果可能,允许编译器使用move小部件,这通常比创建副本更有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读