在java中,上下转换和下转换的重复是否会擦除子类中的数据



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

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

在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))

最新更新