-6

我正在审查一段看起来像这样的代码:

float x = 9;
float y = 5;
int z = (int)(x / y);

问题:

我想知道为什么在第 3 行已经声明 z 是一个 int 时还有第二个 int。提前致谢。

4

3 回答 3

6

除法的结果x / yfloat. Java 不允许您int使用缩小的原始转换(此处为int)来分配给这样的变量,因为这可能会丢失精度。但是 Java 将允许您通过显式强制转换来做到这一点,其中 Java 假定您知道自己在做什么。

于 2013-08-21T00:46:59.920 回答
4

您必须将结果声明(x/y)int,否则您会尝试使用 a 设置int变量的值float,这会产生编译器错误。当减少数字的精度或范围时,需要这个有目的的声明。

于 2013-08-21T00:47:18.457 回答
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,,
于 2013-08-21T00:59:44.380 回答