首页 文章

在java中,重复的向下转换和向上转换会删除子类中的数据吗?

提问于
浏览
0

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

因为我知道当浮点型数据在c中转换为int时浮点被擦除,我想知道它是否对java中的类的工作方式相同 .

1 回答

  • 4

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

相关问题