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是按值还是引用分配,在这种情况下我希望它通过引用分配.我不确定它究竟会做什么,所以我在这里问.
套接字
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当然,后来的分配6到a无关存储在值b.
同样如此:
Socket d;
Socket s;
d = /* ... create and connect a socket... */;
s = d;
d = null;
Run Code Online (Sandbox Code Playgroud)
有什么价值s?对!它是对连接的套接字对象的引用.中的值s(一个参考插座)是由您分配一个不同的值完全不受影响d.
现在,当然,如果d和s指向(指)相同的对象,自然是对象更改任何时候,你可以通过看到的变化d或s.所有这一切d,并s要做的就是告诉我们的目标是,他们不包含的对象都没有.它们指向包含该对象的内存.
一旦你掌握了对象引用就像ints一样,并且具有完全相同的行为,理解Java代码会变得容易很多.