在java中,重复向下转型和向上转型是否会擦除子类内部的数据?

In java, does repetition of downcasting and upcasting erases data inside subclass?

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

因为我知道在 c++ 中将 float 类型的数据转换为 int 时会删除浮点数,所以我想知道它是否适用于 java 中的 class。

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