变量通过引用或值?Java的

Dav*_*vid 1 java sockets pass-by-reference

我有一个当前连接的插座.

Socket s; //Connected socket
Run Code Online (Sandbox Code Playgroud)

如果我使用:

 Socket d = s;
Run Code Online (Sandbox Code Playgroud)

套接字d是否相同,连接套接字?这取决于java是按值还是引用分配,在这种情况下我希望它通过引用分配.我不确定它究竟会做什么,所以我在这里问.

Upu*_*ara 6

套接字d是否相同,连接套接字?是


Java对象中创建一个名为" Heap " 的内存中的特殊区域.所以s并且d只是您在堆区域中创建的Socket对象的指针(或引用).

在此输入图像描述


T.J*_*der 5

套接字d是否相同,连接套接字?

这取决于java是按值还是引用分配的

Java 完全是 pass-by/assign-by .此处指定的值是对象的引用.可以把它想象成一个int告诉我们对象在内存中的哪个插槽.

继续int比喻:

int a;
int b;

a = 5;
b = a;
a = 6;
Run Code Online (Sandbox Code Playgroud)

有什么b价值?5当然,后来的分配6a无关存储在值b.

同样如此:

Socket d;
Socket s;

d = /* ... create and connect a socket... */;
s = d;
d = null;
Run Code Online (Sandbox Code Playgroud)

有什么价值s?对!它是对连接的套接字对象的引用.中的值s(一个参考插座)是由您分配一个不同的值完全不受影响d.

现在,当然,如果ds指向(指)相同的对象,自然是对象更改任何时候,你可以通过看到的变化ds.所有这一切d,并s要做的就是告诉我们的目标是,他们不包含的对象都没有.它们指向包含该对象的内存.

一旦你掌握了对象引用就像ints一样,并且具有完全相同的行为,理解Java代码会变得容易很多.