2016-02-29 106 views

回答

5

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

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

+0

这是不正确的。返回的类型将取决于这些变量的类型。 – Snak

+1

@Snak好的工作。有一点点困惑,但我看你是对的。 – Spencer4134

+0

没问题,只需编辑它。 – Snak

0

因为int不是很长,而long也不是int。

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

+0

您投了_value_,而不是_object_。另外,考虑给出一个更好的例子,因为'10'已经是Java中的int了,虽然你正在说明这个想法,但它可能会进一步混淆OP。 –

+0

@KedarMhaswade我投任何我想要的xD 10L是不是整数,10L长,由于L. – BurnyDaKath

2

你看到的是从一种价值类型铸造到另一种价值。

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

由于一个int没有十进制值,存储在int对象中的数据也不会如果希望是计算(同样为长)

的精确值确切的值,你应该看看一个double。

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

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

我希望这有助于。

+0

编辑 - 指出铸造的存在是因为通用的类型是有 - 是错误的。从一开始,Cast就是Java的一部分。泛型类型是在Java 1.5中引入的。 –

+0

我应该补充说它也是为了继承,但它已经够难了,我更感兴趣先给他一个原因。如果他真的想要他可以开始寻找它的用途。我添加了编辑,因为没有人知道为什么这种事情是/可能在第一个地方......我甚至添加了继承示例 –

2

你正在谈论的东西叫做铸造。

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

可以在基元类型和类上进行转换。

铸造手段采取一个特定类型的对象和“把它变成”另一对象类型。这个过程也被称为铸造变量。

欲了解更多您可以阅读here.

在你的情况,你使用铸造,因为你正在转换原始类型的变量(这是在右侧),以型INT之一是上左边。

0

在圆括号内有一个类型通常意味着不仅在Java中,而且在其他语言(例如C#)中进行投射。

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

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

不过,如果你投了非整数值(浮动,双),以一个整数值(字节,short,int和长),它将返回截断值,而不是舍入值。