long <name> =(long)<expression>;用Java做什么?

时间:2016-02-29 18:02:51

标签: java types int long-integer

表达式之前的以下语句中(long)(int)是什么意思?

long years = (long) (minutes / minutesInYear);
int remainingDays = (int) (minutes / 60 / 24) % 365;

5 个答案:

答案 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),它将返回截断值,而不是舍入值。