首页 > 解决方案 > 在java中,重复向下转换和向上转换是否会擦除子类中的数据?

问题描述

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

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

标签: javadowncastupcasting

解决方案


在 Java 中,对象类型是引用类型,这意味着表达式永远不会实际计算为对象,而只是对对象的引用

结果,向上转换和向下转换实际上根本不会触及对象。它们只是为您提供对该对象的不同类型的引用。

也就是说,这个Java代码:

(Subclass)((Superclass) instanceOfSubclass)

大致类似于此 C++ 代码:

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

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

(double)((int) 3.5)

计算为 to3而不是 to 3.5,因为转换为 typeint丢弃了值的小数部分。这类似于此 C++ 代码:

static_cast<double>(static_cast<int>(3.5))

推荐阅读