gpt4 book ai didi

java - 为什么转换方向在原始类型中从大到小,在对象中从小到大?

转载 作者:搜寻专家 更新时间:2023-10-31 08:18:04 25 4
gpt4 key购买 nike

在Java中在将 double(内存大)转换为 Integer(内存小)时,我们需要强制转换

int x = (int) 4.3;

但是在对象的情况下,如果父类是“哺乳动物”(内存大小小),它的子类是“人类”(内存大,因为比哺乳动物有更多的属性)

然后

Mammal m = new Human(); //works without casting

但从小到大的转化

Human h = (Human) m ; // needs casting 

提前致谢。

最佳答案

转换与对象的大小无关:它与变量的范围有关。

“范围”是指变量可以包含的不同值的种类。如果你从一个变量赋值给另一个变量,其范围是第一个变量的超集,你不需要强制转换,因为你知道赋值是正确的。但是,当您从一个变量赋值给范围是子集的另一个变量时,您确实需要强制转换,因为赋值可能无法实现。

假设您有两个容器:一个塑料桶和一个铁丝购物篮,大小相同。显然,任何你能放在铁丝篮里的东西,你都可以放在浴缸里。但并不是所有可以放在浴缸里的东西都可以放在篮子里。一堆苹果,你可以。但是一堆葡萄干,你不能——它们会从篮子的洞里掉下来。因此,浴缸可容纳的元素范围大于篮子可容纳的元素范围,即使两者的尺寸相同。

在这个类比中,转换就像检查您要移动的东西是否适合新容器。将东西从篮子移到浴缸时不需要检查,但从浴缸移到篮子时需要检查,否则水果会弄得满地都是。

在您的特定情况下,我们知道每个人都是哺乳动物,但并非每个哺乳动物都是人类,因此 Mammal 类型变量的范围大于 Human 类型变量的范围。我们也知道double的取值范围(大约2^1024 - -(2^1024))大于int的取值范围(2^31-1 - -2^31)。因此,在任何一种情况下,从前者分配给后者都需要强制转换,但从后者分配给前者则不需要。

关于java - 为什么转换方向在原始类型中从大到小,在对象中从小到大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7037512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com