3

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

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

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;
}

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

我的问题是:

  1. 该操作(int)(x+y)(double x, int y)零件中做了什么?这显然不是乘法。想不出来那个。

  2. 一些方法调用会要求两个ints。Java 把它们变成了doubles,对吧?

4

6 回答 6

4

在您的情况下,这就是类型转换-(缩小尺寸)。

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

由于 int z 指向一个双精度值。它通过类型转换为 Int 进行了缩小。

于 2013-06-04T03:36:28.987 回答
1

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

这称为显式类型转换。该操作(int)(x+y)意味着xy相加,然后将其结果强制转换为int。这意味着即使xand yare double,结果x+y也会被转换为int。在该方法中,static int foo(double x, int y),x是 adouble被添加到y, 这是一个int。将双精度加到int, 的结果将产生double. 因此要将其转换为int,将其转换为(int)(x+y)

于 2013-06-04T04:14:20.667 回答
1

该操作(int)(x+y)(double x, int y)零件中做了什么?这显然不是乘法。想不出来那个。

是类型转换,表示加法的结果将被转换为int.

一些方法调用会要求两个ints。Java 把它们变成了doubles,对吧?

不,Java 不会那样做。intdouble价值观不同。

于 2013-06-04T03:37:01.777 回答
1
  1. (int)(x+y)是从doubleto的结果的强制转换int

  2. Java 不会将整数强制转换为双精度数。它们是数值的不同表示。

于 2013-06-04T03:37:13.137 回答
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. 两个整数的总和总是一个整数,一个整数和双精度的总和将返回一个双精度值。

于 2013-06-04T03:50:29.253 回答
-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)
于 2013-06-04T03:36:20.360 回答