变量声明中的括号

时间:2013-06-04 03:33:47

标签: java casting

很抱歉,如果这是超级基础,我只是不确定如何搜索。

我正在查看刚刚回来的考试中的一个例子,我认为我在这里遇到了一些理解错误。这是给定的代码:

public static void main(String[] args) {
    int i, i1 = 2, i2 = 4;
    double d, d1 = 3.0, d2 = 4.5;
}

static void foo(int x, double y) {
    double z = x + y;
    System.out.println("Value of foo is " + z);
}

static double foo(double x, double y) {
    return x - y;
}

static int foo(double x, int y) {
    int z = (int) (x + y)
    return z;
}

然后它会要求您为各种方法调用提供值返回,打印输出或错误描述(如双d可能尚未初始化)。

我的问题是:

  1. (int)(x+y)部分的操作(double x, int y)做了什么?这显然不是乘法。无法想出那个。

  2. 一些方法调用会要求两个int。 Java将它们变成double,对吗?

6 个答案:

答案 0 :(得分:3)

那就是Type Casting - (缩小尺寸)。

由于x在您的示例中是double,而y是int。 x + y返回一个双精度。

因为int z指向一个double值。使用Type转换为Int。

缩小尺寸

答案 1 :(得分:1)

  

(int)(x+y)部分中的操作(double x, int y)做了什么?这显然不是乘法。无法想出那个。

是类型转换,这意味着添加的结果将被转换为int

  

一些方法调用会要求两个int。 Java将它们变成double s,对吧?

不,Java不会这样做。 intdouble值不同。

答案 2 :(得分:1)

  1. (int)(x+y)是从doubleint的结果的演员。

  2. Java不会强制进入双打。它们是数值的不同表示。

答案 3 :(得分:1)

  

(double x,y y)部分中的操作(int)(x + y)是做什么的?这显然不是乘法。无法想出那个。

这称为显式类型转换。操作(int)(x+y)表示添加了xy,然后将结果投放到int。这意味着,即使xydouble,结果x+y也会投放到int。在该方法中,static int foo(double x, int y)xdouble添加到y,这是int。添加到int的double的结果将导致double。因此,要将其转换为int,则将其转换为(int)(x+y)

答案 4 :(得分:0)

  1. 如果x = 4.5且y = 5,并调用方法foo(x,y),则调用方法定义foo(double x,int y)。在java中,JVM将加载与其参数匹配的类。并且x和y的总和将产生9.5,这是双倍的。并且(int)只是将其值为9.5的double值转换为其int值,即9。

  2. 两个整数之和总是一个int,int和double之和将返回一个double值。

答案 5 :(得分:-2)

double + int == double

return 5/2   // returns 2 (not turned into doubles)
return 5.0/2 // returns 2.5 (turned into doubles)
return (int)(5.0/2)  // returns 2 (turned into doubles, then turned into int)
return 5d/2 // returns 2.5 (turned into doubles)