我意识到向上转换将子类转换为超类,而向下转换则以相反的方式转换 . 但是,假设子类和超类有不同数量的数据类型,从子类 - >超类 - >子类的转换是否会成为数据擦除的一部分,因为子类中的某些数据部分不包含在超类中?
因为我知道当浮点型数据在c中转换为int时浮点被擦除,我想知道它是否对java中的类的工作方式相同 .
在Java中,对象类型是引用类型,这意味着表达式实际上从不计算对象,而只是对对象的引用 .
因此,向上转发和向下转换根本不会触及该对象;他们只是给你对象的不同类型的引用 .
也就是说,这个Java代码:
(Subclass)((Superclass) instanceOfSubclass)
大致类似于这个C代码:
dynamic_cast<subclass &>(static_cast<superclass &>(instance_of_subclass))
但是,如果您使用 int 和 float 等值类型进行转换,那么您确实可能会丢失数据;这个Java代码:
int
float
(double)((int) 3.5)
求值为 3 而不是 3.5 ,因为转换为类型 int 会丢弃该值的小数部分 . 这类似于这个C代码:
3
3.5
static_cast<double>(static_cast<int>(3.5))
1 回答
在Java中,对象类型是引用类型,这意味着表达式实际上从不计算对象,而只是对对象的引用 .
因此,向上转发和向下转换根本不会触及该对象;他们只是给你对象的不同类型的引用 .
也就是说,这个Java代码:
大致类似于这个C代码:
但是,如果您使用
int
和float
等值类型进行转换,那么您确实可能会丢失数据;这个Java代码:求值为
3
而不是3.5
,因为转换为类型int
会丢弃该值的小数部分 . 这类似于这个C代码: