java - 在java中,重复向下转换和向上转换是否会擦除子类中的数据?
问题描述
我意识到向上转换将子类转换为超类,而向下转换则以相反的方式进行。但是,假设子类和超类有不同数量的数据类型,从子类->超类->子类的转换是否会因为子类中的某些部分数据不包含在超类中而导致部分数据擦除?
因为我知道当浮点类型的数据在 c++ 中转换为 int 时浮点会被删除,所以我想知道它对于 java 中的类是否以相同的方式工作。
解决方案
在 Java 中,对象类型是引用类型,这意味着表达式永远不会实际计算为对象,而只是对对象的引用。
结果,向上转换和向下转换实际上根本不会触及对象。它们只是为您提供对该对象的不同类型的引用。
也就是说,这个Java代码:
(Subclass)((Superclass) instanceOfSubclass)
大致类似于此 C++ 代码:
dynamic_cast<subclass &>(static_cast<superclass &>(instance_of_subclass))
但是,如果您使用 和等值类型进行转换int
,float
那么您确实会丢失数据;这个Java代码:
(double)((int) 3.5)
计算为 to3
而不是 to 3.5
,因为转换为 typeint
丢弃了值的小数部分。这类似于此 C++ 代码:
static_cast<double>(static_cast<int>(3.5))
推荐阅读
- c - 应该进行哪些更改才能在屏幕上生成以下图案?***** **** *** ** *
- node.js - 我无法安装包 quick.db
- java - 在 Hibernate 中是否可以使用可选的 ElementCollections
- python - 如何使用变量的值而不是数字
- azure - Azure 管道 - Azure 网络负载均衡器任务如何工作?
- python - 从 PyTorch 导出的 ONNX InferenceSession ONNX 模型失败
- count - 循环内变量为数据子集获取的唯一值的数量
- ruby-on-rails - 我应该如何在 github 上的工作流文件中安装 libmysqlclient.so.20?
- angular - 如果未返回所需的响应,则在 http 请求管道中使用 rxjs repeatWhen 以重复请求
- python - Matplotlib 3D散点图cmap