我有一個當前連接的插座。通過引用或值的變量? Java
Socket s; //Connected socket
如果我使用:
Socket d = s;
將插座d
是相同的,連接插座?它取決於java是通過值還是引用賦值,在這種情況下,我希望它通過引用來分配。我不確定它究竟會做什麼,所以我在這裏問。
我有一個當前連接的插座。通過引用或值的變量? Java
Socket s; //Connected socket
如果我使用:
Socket d = s;
將插座d
是相同的,連接插座?它取決於java是通過值還是引用賦值,在這種情況下,我希望它通過引用來分配。我不確定它究竟會做什麼,所以我在這裏問。
套接字
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
或s
的變化。所有那d
和s
做的是告訴我們對象在哪裏,他們不包含包含的對象。他們指向包含對象的內存。
一旦你掌握那個對象引用是原語就像int
S和具有完全相同的行爲,理解Java代碼中得到了很多容易。
套接字d是否是相同的連接套接字?是
在Java
對象在被稱爲「堆」記憶的特殊區域中創建。 因此s
和d
只是您在堆區域創建的 套接字對象的指針(或引用)。
我會爲圖解得出這個答案,除非...我早就已經爲它的文本清晰簡單地提出了它。 ;-) –
在初始化插槽d
要創建這些努力指向一個對象的引用指針d。
如果Socket s = socketobject(),s也是指向套接字對象的引用指針。
所以如果你指定d = s,這意味着d的引用指針與s的引用指針相同,它也指向socket對象。
所以你的答案應該是肯定
Java
引用來自C++
引用不同。在C++
中,一旦創建了引用,就不能再引用另一個對象;它不能被重新安裝。在Java
它可以。
所以經過:
Socket d = s;
可以使d(或多個)指向一些其他Socket
對象,但即使如此,S(或d)仍然指向原始Socket
。
其他答案也很好。謝謝大家的幫助 :) – David