很抱歉,如果这是超级基础,我只是不确定如何搜索。
我正在查看刚刚回来的考试中的一个例子,我认为我在这里遇到了一些理解错误。这是给定的代码:
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
可能尚未初始化)。
我的问题是:
(int)(x+y)
部分的操作(double x, int y)
做了什么?这显然不是乘法。无法想出那个。
一些方法调用会要求两个int
。 Java将它们变成double
,对吗?
答案 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不会这样做。 int
和double
值不同。
答案 2 :(得分:1)
(int)(x+y)
是从double
到int
的结果的演员。
Java不会强制进入双打。它们是数值的不同表示。
答案 3 :(得分:1)
(double x,y y)部分中的操作(int)(x + y)是做什么的?这显然不是乘法。无法想出那个。
这称为显式类型转换。操作(int)(x+y)
表示添加了x
和y
,然后将结果投放到int
。这意味着,即使x
和y
为double
,结果x+y
也会投放到int
。在该方法中,static int foo(double x, int y)
,x
被double
添加到y
,这是int
。添加到int
的double的结果将导致double
。因此,要将其转换为int
,则将其转换为(int)(x+y)
。
答案 4 :(得分:0)
如果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。
两个整数之和总是一个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)