В Java типами объектов являются ссылочные типы , что означает, что выражение никогда не вычисляется на самом деле, только на ссылку на объект.
Какв результате, повышение и понижение вообще не касаются объекта;они просто дают вам ссылки различных типов на объекта.
То есть этот код Java:
(Subclass)((Superclass) instanceOfSubclass)
примерно аналогичен этому коду C ++:
dynamic_cast<subclass &>(static_cast<superclass &>(instance_of_subclass))
Однако, если вы выполняете преобразования с типами значений , такими как int
и float
, тогда вы действительно можете потерять данные;этот код Java:
(double)((int) 3.5)
оценивается как 3
, а не 3.5
, потому что преобразование в тип int
отбрасывает дробную часть значения.Это аналогично этому C ++-коду:
static_cast<double>(static_cast<int>(3.5))