2011-07-31 13 views
1

私は現在接続されているソケットを持っています。参照または値による変数? Java

Socket s; //Connected socket 

私が使用している場合:

Socket d = s; 

dが同じ、接続されたソケットもソケットのでしょうか?これは、javaが値または参照によって割り当てられているかどうかによって異なります。この場合は、参照によって割り当てたいと思います。私はそれが正確に何をしようとしているのか分からないので、私はここで尋ねている。

答えて

5

ソケットdは同じで接続されたソケットですか?

は、Java値または参照により代入されている場合はい

は異なりJavaはある

完全パスごと/割り当てるバイ。ここで割り当てられる値は、オブジェクトへの参照です。オブジェクトが入っているメモリのどのスロットを教えてくれることintとして考えて

intアナロジーを続けて:。

int a; 
int b; 

a = 5; 
b = a; 
a = 6; 

bの値は何ですか? 5もちろん、6からaへの後の割り当ては、bに格納された値とは関係ありません。

そしてそう同様に:sの値が

Socket d; 
Socket s; 

d = /* ... create and connect a socket... */; 
s = d; 
d = null; 

何ですか?右!接続されたソケットオブジェクトへの参照です。 s(ソケットへの参照)の値は、別の値をdに割り当てることによって完全に影響を受けません。 dsは当然、同じオブジェクトを(参照)、変更をオブジェクトの任意の時間を指しているとき

さて、もちろん、あなたがdまたはs経由の変化を見ることができます。すべてdsは、オブジェクトがどこにあるかを教えてくれるので、にはオブジェクトが含まれていません。オブジェクトを含むメモリを指します。

あなたは、そのオブジェクトに参照を把握したらちょうどintのようなプリミティブであり、まったく同じ振る舞いを持つ、Javaコードを理解することはたくさん容易になります。

+1

他の回答も大きかった。皆さんの助けをありがとう:) – David

6

ソケットdは同じで接続されたソケットですか?はい


Java内のオブジェクトは、「ヒープ」と呼ばれるメモリ内の特別な領域に作成されます。 したがってsdは、ヒープ領域に を作成したSocketオブジェクトのポインタ(または参照)のみです。

enter image description here

+0

私はあなたのテキストの明確な簡潔さのために既にそれを早めにアップしていました。 ;-) –

2

のsはソケットへの参照であるとしましょう、dがソケットへの参照のコピーとなります。

「d = null」を指定すると、sには影響しません。

+0

、s = nullの場合はdに影響しますか? – David

+0

いいえ、同じオブジェクトへの参照の両方のコピーであり、元のコピーはありません。 – Tristan

0

あなたはソケットD

を初期化するときに、オブジェクトを指し示すしようとしている参照ポインタdを作成しています。

ソケットs = socketobject()の場合、sはソケットオブジェクトを指す参照ポインターでもあります。

d = sを指定すると、dの参照ポインタは、ソケットオブジェクトを指すsの参照ポインタと同じであることを意味します。

だからあなたの答えはYES

0

Java参照がC++参照異なっている必要があります。 C++では、一度参照が作成されると、後で他のオブジェクトを参照することはできません。再設置することはできません。 Javaにすることができます。

だから、後:

Socket d = s; 

あなたは、D(または複数)を作ることができるいくつかの他のSocketオブジェクトを指し、それでもS(またはd)まだ元Socketを指します。

関連する問題