我正在审核一段看起来像这样的代码:
float x = 9;
float y = 5;
int z = (int)(x / y);
问题:
我想知道为什么第3行有第二个int,因为它已经声明z是一个int。提前致谢。
答案 0 :(得分:6)
除法x / y
的结果是float
。 Java不允许您使用缩小的原始转换(此处为int
)来分配这样的int
变量,因为这可能会失去精度。但Java允许您使用显式转换来执行此操作,其中Java假定您知道您在做什么。
答案 1 :(得分:4)
您必须将结果(x/y)
声明为int
,否则您尝试使用int
设置float
变量的值,从而生成编译器错误。在降低数字的精度或范围时,需要这种有目的的声明。
答案 2 :(得分:0)
根据编译器我们是孩子们的...因此他(编译器)希望我们明确提到我们正在做的是故意而不是错误,因此我们需要明确指定..
以下是两种情况: 1)使用(int):
**Program:**
class fox
{
public static void main(String args[])
{
float x = 9;
float y = 5;
int z = (int)(x / y);
System.out.print(z);
}
}
**Output:**
# 1: hide clone input 8 seconds ago
result: success time: 0.07s memory: 380224 kB returned value: 0
input: no
output:
1
2)没有(int):
**Program:**
class fox
{
public static void main(String args[])
{
float x = 9;
float y = 5;
int z = (x / y);
System.out.print(z);
}
}
**Output:**
Main.java:7: error: possible loss of precision
int z = (x / y);
^
required: int
found: float
1 error
# 1: hide clone 6 seconds ago
result: compilation error
// see the compiler cannot understand that we wish to do it purposefully,,