我正在审查一段看起来像这样的代码:
float x = 9;
float y = 5;
int z = (int)(x / y);
问题:
我想知道为什么在第 3 行已经声明 z 是一个 int 时还有第二个 int。提前致谢。
我正在审查一段看起来像这样的代码:
float x = 9;
float y = 5;
int z = (int)(x / y);
问题:
我想知道为什么在第 3 行已经声明 z 是一个 int 时还有第二个 int。提前致谢。
除法的结果x / y
是float
. Java 不允许您int
使用缩小的原始转换(此处为int
)来分配给这样的变量,因为这可能会丢失精度。但是 Java 将允许您通过显式强制转换来做到这一点,其中 Java 假定您知道自己在做什么。
您必须将结果声明(x/y)
为int
,否则您会尝试使用 a 设置int
变量的值float
,这会产生编译器错误。当减少数字的精度或范围时,需要这个有目的的声明。
根据编译器的说法,我们是孩子的..因此他(编译器)希望我们明确提及我们正在做的事情是故意的而不是错误的,因此我们需要明确指定..
这是两种情况: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,,