long <name> = (long) <expression>; 是什么意思?在 Java 中做什么?

What does long <name> = (long) <expression>; do in Java?

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

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

转换对象,因为 int 不是 long,long 也不是 int。

int i = (int) 10L; - 因为 10L 很长,而您希望它是整数。

您看到的是从一种值类型转换为另一种值类型。

编辑:之所以可能,是因为如果您正在使用泛型类型或继承(参见示例)并且您无法事先确定对象类型,则可能需要它。但是对于这种代码,通常最好首先使用正确的类型并避免错误! (在本例中为双)

由于int没有十进制值,所以int对象中存储的数据不会是计算的准确值(long相同)

如果您想要准确的值,您应该查看双精度值。

顺便说一句,这也适用于非数值:

Object car = new Car();
Car myNewCar = (Car) car;

希望对您有所帮助。

(minutes / minutesInYear) 不清楚它将 return 的变量类型。如果你想要它在一个int变量中,你必须在它之前写(int)。这称为 "typecasting",它基本上将一种格式转换为另一种格式。您会注意到 int a = 10.5; 不起作用,但 int a = (int) 10.5; 起作用。

在您的示例中,您希望:(minutes / minutesInYear) 存储在浮点数中。所以,为了确保它变成一个浮点数,你使用 (float)

对它进行类型转换

你说的这个东西叫做选角。

您可以将右侧的表达式转换为左侧的表达式。

可以对原始类型进行转换,也可以对 类 进行转换。

转换 意味着获取一个特定类型的对象并将其“转换为”另一种对象类型。此过程也称为转换变量。

更多内容请阅读here.

在您的情况下,您使用转换是因为您正在将基本类型 double(位于右侧)的变量转换为 int在左边。

在括号内包含类型通常意味着强制转换,不仅在 Java 中而且在其他语言(例如 C#)中也是如此。

在第一种情况下,如果 minutes 和 minutesInYear 是整数,操作将产生一个整数然后将其转换为 long,它与整数相同,但为 64 位而不是 32 位(它可以存储更大的值)。

在第二种情况下恰好是相同的,但是你将它转换为一个整数这可能是多余的(不是必要的)因为结果已经是一个整数。

然而,如果您将非整数值(浮点型、双精度)转换为整数值(字节、短整型、整数、 long) 它将 return 截断值 ,而不是舍入值。