假设我有一个双精度和一个整数。
double x = 5;
int y = x;
执行此操作时,它会引发错误,因为我需要像这样将其从double显式转换为int,
int y = (int) x;
使其正常工作。但是当我这样做
int x = 5;
double y = x;
不会引发任何错误,并且可以正常工作。必须从double显式转换为int而不是反之亦然吗?
答案 0 :(得分:2)
Double比int更宽泛。 According to specification您可以按以下顺序分配值:
byte -> short -> int -> long -> float -> double
主要思想:
加宽基元转换不会丢失有关数值总体大小的信息。
但是:
缩小的原始转换可能会丢失有关数值总大小的信息,并且还会丢失精度和范围。
答案 1 :(得分:1)
因为当您将整数转换为双精度数时,它的含义是1或1.0。但是,当您从double转换为int时,说的是1.8或1是不一样的,那么您必须显式地对其进行转换。
答案 2 :(得分:1)
除了失去准确性外,它们的大小也不同。
想把衣柜从卡车里塞进汽车后备箱里。那是行不通的,但是将箱子从汽车后备箱拿到卡车上就可以了。
int是2到4个字节,而double是8个字节,如此处TutorialsPoint
所述答案 3 :(得分:0)
可以加倍
考虑到内存中双精度型的大小,很明显双精度型可以包含一个int(可以执行更多操作而可以执行更少操作的人)。
加倍为int
由于我们丢失了信息,因此不允许进行此演员表转换。
例如,如果我们要转换一个像1.1618这样的浮点数,则会丢失信息。这个双精度数的“等效项”可以是1或2,但是Java永远不会通过符号'='为您决定可能性。您必须使用例如none
之类的函数来选择要将双精度转换为整数的转换。