表达式之前的以下语句中(long)
和(int)
是什么意思?
long years = (long) (minutes / minutesInYear);
int remainingDays = (int) (minutes / 60 / 24) % 365;
答案 0 :(得分:5)
(minutes / minutesInYear)
不清楚它将返回什么变量类型。如果你想在int变量中使用它,你必须在它之前写(int)
。这称为“类型转换”,它基本上将一种格式转换为另一种格式。您会注意到int a = 10.5;
无效,int a = (int) 10.5;
无效。
在您的示例中,您希望将此:(minutes / minutesInYear)
存储在浮点数中。因此,为了确保它成为浮点数,您可以使用(float)
答案 1 :(得分:2)
您看到的是从一种值类型转换为另一种值类型。
编辑:可能的原因是,如果您正在使用泛型类型或继承(请参阅示例),您可能需要它,并且您无法事先确定对象类型。但是对于这种代码,通常最好只使用正确的类型并避免错误! (在这种情况下为双倍)
由于int没有十进制值,因此存储在int对象中的数据将不是计算的确切值(长时间相同)
如果你想要准确的值,你应该看一下双。
这也适用于非数字值:
Object car = new Car();
Car myNewCar = (Car) car;
我希望这会有所帮助。
答案 2 :(得分:2)
你所谈论的事情被称为铸造。
您可以将右侧的表达式转换为左侧的表达式。
可以对基本类型和类进行转换。
强制转换表示获取一个特定类型的对象并将其“转换为”另一个对象类型。此过程也称为转换变量。
有关详情,请阅读here.
在您的情况下,您使用强制转换是因为您要将基本类型 double (位于右侧)的变量转换为 int 类型的变量,该变量位于左侧。
答案 3 :(得分:0)
转换对象,因为int不是long,而long不是int。
int i = (int) 10L;
- 因为10L很长,你希望它是int。
答案 4 :(得分:0)
在括号中包含一个类型通常意味着不仅在Java中,而且在其他语言中(例如,C#)。
在第一种情况下,如果minutes和minutesInYear是整数,操作将产生一个整数。 然后你将它转换为长,这与整数相同,但是64位而不是32位(它可以存储更大的值)。
在第二种情况下恰好相同,但是你把它转换为整数,这可能是多余的(不必要),因为结果已经是整数。
然而,如果你将非整数值(float,double)强制转换为整数值(byte,short,int,long),它将返回截断值,而不是舍入值。