В Oracle, (+) обозначает «необязательную» таблицу в JOIN. Поэтому в вашем запросе
select a.id, b.id, a.col_2, b.col_2, ...
from a,b
where a.id=b.id(+)
это таблица LEFT OUTER JOIN 'b' с таблицей «a». Как современный запрос левого соединения. (он вернет все данные таблицы «a», не теряя своих данных, с другой стороны, необязательная таблица «b» может потерять свои данные)
select a.id, b.id, a.col_2, b.col_2, ...
from a
Left join b ON a.id=b.id
ИЛИ
select a.id, b.id, a.col_2, b.col_2, ...
from a
Left join b using(id)
select a.id, b.id, a.col_2, b.col_2, ...
from a,b
where a.id=b.id
он будет только возвращает все данные, где «a» и «amp; Значение 'b' tables 'id' равнозначно, означает общую часть.
Old:
select a.id, b.id, a.col_2, b.col_2, ...
from a,b
where a.id(+)=b.id
Modern:
select a.id, b.id, a.col_2, b.col_2, ...
from a
Right join b ON a.id=b.id
ИЛИ
select a.id, b.id, a.col_2, b.col_2, ...
from a
Right join b using(id)
https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:6585774577187
Ничего не происходит. Объект, на который ссылается переменная 'b', является отдельным объектом. Это в то же время экземпляр B и экземпляр A.
Когда вы выполняете присвоение a = b
, объект, на который ранее ссылалась переменная «а», становится недоступным. Рассмотрение этого старого объекта не входит в это обсуждение.
После назначения «a» и «b» относятся к одному и тому же объекту. Объект неизменен. Это все еще экземпляр B и экземпляр A.
Возможно, блок в вашем понимании - это различие между объектами и переменными, которые относятся к этим объектам?
=
является оператором присваивания.
Давайте не будем обращать внимания на следующие пункты.
Теперь предположим, что есть два класса Super
и Sub
такие, что Sub extends Super
.
SuperClass reference = new SubClass();
Это разрешено, поскольку подкласс наследует от суперкласса. Выше у нас есть объект типа SubClass, созданный в куче, и он доступен через. ссылка с именем reference
Обратите внимание, что ссылка типа SubClass
не может ссылаться на объект из SuperClass
. Посмотрим вкратце, почему так? Если бы ссылка типа SubClass
позволяла ссылаться на Объект типа SuperClass
, тогда было бы разрешено вызывать дополнительные методы (функции), определенные в SubClass
(SubClass
унаследовала бы все методы из SuperClass
и также определил бы несколько дополнительных методов). Теперь это привело бы к сбою приложения, поскольку у объекта SuperClass
есть только методы, определенные в SuperClass
, но нет дополнительных методов, определенных в SubClass
. Следовательно, компилятор предотвращает это во время компиляции. Это ошибка времени компиляции, чтобы иметь ссылку типа SubClass
, ссылающуюся на объект типа SuperClass
Теперь давайте посмотрим на код, как упомянуто в строке
SuperClass a = new SuperClass();
SubClass b = new SubClass();
a = b;
1: У нас есть объект SuperClass, на который ссылается переменная типа SuperClass с именем a
Строка 2: У нас есть объект SubClass, на который ссылается переменная типа SubClass с именем b
Строка 3: у нас есть назначение, в котором a
назначено для ссылки на тот же объект, что и в b
. Итак, теперь у нас есть обе ссылки, ссылающиеся на объект типа SubClass
, созданный в строке 2. Объект typer SuperClass
, созданный в строке 1 (с текущим доступным кодом, упомянутым в вопросе), не имеет каких-либо ссылок, поэтому он пригоден для сбора мусора.