Преобразование типов Java: где преобразование на самом деле? - PullRequest
0 голосов
/ 17 марта 2019

Я задаю себе вопрос:

Почему Java называет это преобразованием типов, если - в некоторых контекстах - тип вообще не меняется?

Давайте рассмотрим простой пример:

String s = "a";

Объект o = s;

Это работает просто отлично, потому что это расширяющее ссылочное преобразование. Тем не менее, ничто никогда не конвертируется в этом контексте. При компиляции 2-го оператора присваивания компилятор видит, что правое выражение имеет другой тип, чем левое. Но это не означает ошибку компиляции, так как Object является супертипом String. Следовательно, ссылка, хранящаяся в s, может храниться в o. Так что, на самом деле, здесь ни один тип не конвертируется.

Или это неправильно?

1 Ответ

0 голосов
/ 17 марта 2019

Стоит помнить, что s является ссылкой на String, а не строкой.

Когда вы присваиваете ссылку на Object ссылку, типизменится ссылка, но ссылка и объект, на который ссылаются, не тронуты.

Фактической операции для этого не существует, так как данные не изменяются.Это только изменяет, как компилятор проверяет его значение.Примечание: реальный процессор не имеет никаких проверок во время выполнения.Для ЦП это просто адрес объекта.

cf для примитивов, назначение другого типа изменяет данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...