学生需要快速的Java澄清

时间:2013-08-21 00:44:37

标签: java

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

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

问题:

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

3 个答案:

答案 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,,