在java中,重复的向下转换和向上转换会删除子类中的数据吗?

问题描述 投票:0回答:1

我意识到向上转换将子类转换为超类,而向下转换则以相反的方式转换。但是,假设子类和超类有不同数量的数据类型,从子类 - >超类 - >子类的转换是否会成为数据擦除的一部分,因为子类中的某些数据部分不包含在超类中?

因为我知道当浮点型数据在c ++中转换为int时浮点被删除,我想知道它是否对java中的类的工作方式相同。

java downcast upcasting
1个回答
4
投票

在Java中,对象类型是引用类型,这意味着表达式实际上从不计算对象,而只是对对象的引用。

因此,向上转发和向下转换根本不会触及对象;他们只是给你对象的不同类型的引用。

也就是说,这个Java代码:

(Subclass)((Superclass) instanceOfSubclass)

大致类似于这个C ++代码:

dynamic_cast<subclass &>(static_cast<superclass &>(instance_of_subclass))

但是,如果您使用intfloat等值类型进行转换,那么您确实会丢失数据;这个Java代码:

(double)((int) 3.5)

评估为3而不是3.5,因为转换为int类型丢弃了该值的小数部分。这类似于这个C ++代码:

static_cast<double>(static_cast<int>(3.5))
© www.soinside.com 2019 - 2024. All rights reserved.