2013-06-04 236 views
0

對不起,如果這是超級基本,我只是不知道如何搜索這個。變量聲明中的小括號

我正在看一個我剛剛回來的考試中的例子,我想我在這裏有一些理解錯誤。下面是給定的代碼:

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 s。 Java將它們變成了double,對吧?

回答

-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) 
+3

所以這就是爲什麼我決定downvote。你的回答沒有回答這個問題。就那麼簡單。你用一種非常複雜的方式回答它的一部分*,但是我不願意這麼回答,因爲你簡單地接觸了實際的演員,然後繼續使用雙重文字。 – Makoto

+1

不是downvoter,但這個答案沒有任何回答OP的任何問題的嘗試。 AFAICS你只需發佈一些代碼來顯示它的結果,但不要給出進一步的解釋。 –

+1

這很有幫助,謝謝。 –

3

也就是說類型轉換 - 你的情況(下上漿)。

由於x在您的示例中是double,y是int。 x + y返回一個雙精度值。

由於int z指向一個double值。它通過類型轉換爲Int來縮小規模。

+0

謝謝!完善。 – user2370043

1

操作(int)(x+y)(double x, int y)部件中做了什麼?這顯然不是乘法。無法找出那一個。

是一個類型轉換,它表示加法的結果將被轉換爲int

某些方法調用會要求兩個int s。 Java將它們變成了double,對吧?

不,Java不會這樣做。 intdouble的值不同。

1
  1. (int)(x+y)是結果的鑄造從doubleint

  2. Java不會強制雙打。它們是數值的不同表示。

0
  1. 如果x = 4.5和y = 5和調用方法foo(X,Y),那麼你的方法定義FOO(雙X,int y)對被調用。在Java中,JVM將加載與其參數匹配的類。 x和y的總和會使你得到9.5,這是雙倍的。並且(int)簡單地類型轉換9.5的雙倍值到它的int值9。

  2. 兩個int的總和總是一個int,int和double的和會返回一個double值。

1

什麼操作(INT)(X + Y)做的(雙X,int y)對一部分?這顯然不是乘法。無法找出那一個。

這被稱爲顯式類型轉換。操作(int)(x+y)意味着添加了xy,並將其結果輸出到int。這意味着即使xydouble,結果x+y將轉換爲int。在該方法中,static int foo(double x, int y),xdouble被添加到y,這是int。將雙倍結果添加到int將導致double。因此將其轉換爲int,它被鑄造爲(int)(x+y)