Будет ли розетка 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 упрощает lot .