java 引用什么意思_java – “通过引用”是什么意思?

博客探讨了Java中参数传递的术语'按引用'的技术含义,对比了不同定义,并讨论了Java如何实际上是通过对象引用传递,而不是指针。文章指出,尽管Java不允许指针指针,但它传递的是对象引用,这在某些定义下可能被视为'按引用',而在其他定义下则不然。作者寻求共识和更精确的定义。
摘要由CSDN通过智能技术生成

谁有权决定?

编辑:显然我没有成功地制定好我的问题.

我不是问Java的参数传递是如何工作的.我知道看起来像一个持有对象的变量实际上是一个包含对象的引用的变量,该引用是通过值传递的.

在这里(在链接的线程和其他)以及其他地方,有很多关于该机制的精细解释.

问题是关于术语“通过参考”的技术含义. (完成编辑)

我不知道这是否是SO的正确的问题,如果不是,道歉,但我不知道一个更好的地方.在其他问题上已经有很多话已经说过了,例如Is Java pass by reference?和pass by reference or pass by value?,但是我没有在这个问题上找到一个权威性的答案.

我认为“通过引用”是指“通过一个引用(通常是一个指针)到对象”,所以被调用者可以修改调用者看到的对象,而“通过值”意味着复制对象,并让被叫方有复制的乐趣(明显的问题:如果对象包含引用,深层复制或浅色).

唱FW开始lots of places saying“通过引用”意思就是这样,here有一些说法意味着更多,但是定义仍然读

A ParameterPassing mode where a reference (or if you want to be politically incorrect, a pointer) to the actual parameter is passed into the formal parameter; when the callee needs the formal parameter it dereferences the pointer to get it.

我没有找到很多地方给出更强的定义,在this页,我发现“形式参数的左值设置为实际参数的左值”.并且如果我理解正确,则使用相同的定义here(“形式参数仅仅作为实际参数的别名”.)

事实上,唯一发现使用更强的定义的地方是反对在Java中的对象被引用传递(这可能是由于我缺少google-fu)的概念的地方.

所以,如果我有事情直接,通过参考

class Thing { ... }

void byReference(Thing object){ ... }

Thing something;

byReference(something);

根据第一个定义大致对应(在C中)

struct RawThing { ... };

typedef RawThing *Thing;

void byReference(Thing object){

// do something

}

// ...

struct RawThing whatever = blah();

Thing something = &whatever;

byReference(something); // pass whatever by reference

// we can change the value of what something (the reference to whatever) points to, but not

// where something points to

在这个意义上说,Java通过引用传递对象就足够了.但是根据第二个定义,传递参考意味着或多或少

struct RawThing { ... };

typedef RawThing *RawThingPtr;

typedef RawThingPtr *Thing;

void byReference(Thing object){

// do something

}

// ...

RawThing whatever = blah();

RawThingPtr thing_pointer = &whatever;

byReference(&thing_pointer); // pass whatever by reference

// now we can not only change the pointed-to (referred) value,

// but also where thing_pointer points to

而且由于Java只允许你有指针对象(限制你可以使用的对象),但是没有指针指针,在这个意义上说,Java通过引用传递对象是完全错误的.

所以,

>我是否充分了解上述传递参考的定义?

>周围有其他定义吗?

>有共识哪个定义是“正确的”,如果是,哪个?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值