就拿浮点数来说吧,float是32位,最小值是-2的-149次方,最大是2的(2-2的-23次方)*127次方,double的最小值是2的-1074次方,最大值为(2-2的-52次方)*2的1023次方,你如果要精确的表示一个数,你认为用谁更准确,double,所以如果当你试图用一个float类型的变量来代表一个双精度的double数值时有没有可能导致这个double数的精度变差呢?肯定有,比如我一个double是2的-1000次方,你能用float表示吗,float最小都才-149次方。所以我们想用一个float表示double的话那么要显式的表示出来,提醒编程者,这儿会导致精度损失。而你如果用double去表示一个float呢,完全就不存在这种情况了,因为他能完全的表示你这个float的精度。所以不需要显式的说明,这就是隐式转换。系统自己帮我们转化好了。
在继承或者面向接口编程中,我们会常常用到这种思想,一个子类Zi继承自父类Fu,那么当父类的变量Fu obj指向子类new Son()时是不需要说明的,你子类都是由我派生出去的,我儿子还需要向别人证明吗?但是你如果如果有一个子类的变量Zi zi=obj了,那么系统会提醒你。这儿需要显式转换,因为父类表示的范围比子类更广泛。
希望对你有用。 |