我有一个当前已连接的套接字。
Socket s; //Connected socket
如果我使用:
Socket d = s;
socket d
是否是相同的连接套接字?这取决于java是按值还是引用分配,在这种情况下我希望它通过引用分配。我不确定它究竟会做什么,所以我在这里问。
答案 0 :(得分:6)
套接字d是否相同,连接套接字?是
在Java
对象中,在内存中名为“堆”的特殊区域中创建。
所以s
和d
只是您创建的Socket对象的指针(或引用)
在堆区域。
答案 1 :(得分:5)
socket
d
是否是相同的连接套接字?
是
这取决于java是按值分配还是引用
Java 完全传递/分配 - 值。此处指定的值是对象的引用。可以把它想象成int
,告诉我们对象在内存中的哪个插槽。
继续int
类比:
int a;
int b;
a = 5;
b = a;
a = 6;
b
的价值是多少? 5
当然,后来6
到a
的分配与b
中存储的值无关。
同样如此:
Socket d;
Socket s;
d = /* ... create and connect a socket... */;
s = d;
d = null;
s
的价值是多少?对!它是对连接的套接字对象的引用。 s
(对套接字的引用)中的值完全不受您为d
分配不同值的影响。
现在,当然,当d
和s
指向(引用)同一个对象时,自然地,只要该对象发生变化,您就可以通过d
或{看到更改{1}}。 s
和d
所做的就是告诉我们对象在哪里,他们根本不会包含对象。它们指向包含对象的内存。
一旦掌握了对象 references 就像s
一样具有原语,并且具有完全相同的行为,理解Java代码会使 lot 更容易。
答案 2 :(得分:2)
假设s是对Socket的引用,d将是对Socket的引用的副本。
如果你做“d = null”,它不会影响s。
答案 3 :(得分:0)
初始化套接字d时
您正在创建一个试图指向对象的引用指针。
如果Socket s = socketobject(),s也是指向socketobject的引用指针。
所以如果你指定d = s,这意味着d的引用指针和s的引用指针相同,它也指向socket对象。
所以你的答案应该是肯定的
答案 4 :(得分:0)
Java
引用与C++
引用不同。在C++
中,一旦创建了引用,就不能在以后引用另一个对象;它不能重新安置。在Java
中可以是。
所以之后:
Socket d = s;
你可以让d(或s)指向其他Socket
个对象,但即便如此,s(或d)仍会指向原始的Socket
。