【问题标题】:What does long <name> = (long) <expression>; do in Java? [duplicate]long <name> = (long) <expression>; 是什么意思?用Java做? [复制]
【发布时间】:2016-06-12 21:27:34
【问题描述】:

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

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

【问题讨论】:

标签: java types int long-integer


【解决方案1】:

(minutes / minutesInYear) 不清楚它将返回什么变量类型。如果你想把它放在一个 int 变量中,你必须在它前面写上(int)。这称为“类型转换”,它基本上将一种格式转换为另一种格式。您会注意到 int a = 10.5; 不起作用,但 int a = (int) 10.5; 起作用。

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

【讨论】:

  • 这不是真的。返回的类型将取决于这些变量的类型。
  • @Snak 好的,正在处理它。有点困惑,但我知道你是对的。
  • 没问题,直接编辑即可。
  • 还不是很清楚,因为它不一定返回双精度
  • @nickwouters 是的,我会编辑它。
【解决方案2】:

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

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

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

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

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

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

我希望这会有所帮助。

【讨论】:

  • 编辑——说因为存在泛型类型而存在强制转换——是错误的。转换从一开始就是 Java 的一部分。 Java 1.5 中引入了泛型类型。
  • 我应该补充说它也是为了继承,但这已经够难了,我更感兴趣的是首先给他一个原因。如果他真的想要,他可以开始寻找它的用途。我添加了编辑,因为没有人说为什么这种事情是/可能的......我什至添加了一个继承示例
【解决方案3】:

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

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

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

不过,如果您将 非整数值(浮点数、双精度)转换为 整数值(字节、短、整数、长),它将返回 截断值,而不是四舍五入的值。

【讨论】:

    【解决方案4】:

    你说的东西叫做铸造。

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

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

    铸造意味着将一个特定类型的对象“转换为”另一种对象类型。此过程也称为强制转换变量。

    更多内容可以阅读here.

    在您的情况下,您使用强制转换,因为您将原始类型 double (位于右侧)的变量转换为类型 int 的变量之一左侧。

    【讨论】:

      【解决方案5】:

      铸造对象,因为 int 不是 long,而 long 也不是 int。

      int i = (int) 10L; - 因为 10L 很长,你希望它是 int。

      【讨论】:

      • 您投射的是一个,而不是一个对象。另外,考虑举一个更好的例子,因为10 已经是 Java 中的int,虽然你是在说明这个想法,但它可能会进一步混淆 OP。
      • @KedarMhaswade 我投了我想要的任何东西 xD 10L 不是 int,10L 很长,因为 L.
      猜你喜欢
      • 1970-01-01
      • 2021-05-07
      • 2015-07-23
      • 2021-11-03
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多