2011-12-28 57 views
-1

考慮:數據值和類型

int x = 10; 
double d = -3.0; 
boolean f = false; 

爲什麼下面仍然是一個雙重它被強制轉換爲int後...對於第二個也是,爲什麼它輸出float時定義爲長?:

(int) d/2.0 
(long) d * 2f 

2.

爲什麼下面的第一個打印一個字符串(?),而後者是一個數字?

"2" + x + 2 
"3" + 3 * x 

但後來有一個與下面的錯誤:

"5" + i + 2 

此外,在follwing,什麼是真正發生的事情,結果是什麼?

d++ + d 

4.

當Math.round時,爲什麼不把它轉換以下雙成浮動,或者是他們同樣的事情?

Math.round(x/d) 
+0

什麼是'i'?... – 2011-12-28 16:05:02

+0

這些都是很多不相關的問題,不使它成爲一個偉大適合SO ... – 2011-12-28 16:05:31

+0

第一個和第二個是運算符優先級(http://introcs.cs.princeton.edu/java/11precedence/),第三個是缺少的上下文(什麼是「我」?)和最後一個: 去嘗試一下。 – 2011-12-28 16:06:06

回答

1

爲什麼在將它作爲int類型轉換後仍然是double類型?對於第二個類型,爲什麼在定義長類型時會輸出一個float類型?:

(int) d/2.0 
(long) d * 2f 

由於投(int)操作的優先級高於/*運營商。 你應該這樣閱讀:

((int) d)/2.0 

((long) d) * 2f 

爲什麼第一以下打印字符串,而後者的數字(?)?

"2" + x + 2 
"3" + 3 * x 

我認爲這是兩個casesm字符串必須 「閱讀」 這一表述是這樣的:

("2" + x) + 2 
"3" + (3 * x) 

但後來有一個與下面的錯誤:

"5" + i + 2 

什麼是錯誤?

此外,隨着實際情況的發生和結果如何?

d++ + d 

這是一系列的操作:

  1. TMP = d
  2. d = d + 1
  3. 返回TMP + d

當數學.round被使用,爲什麼它將下面的double轉換爲af憎惡,還是他們是同一件事?

Math.round(x/d) 

將其轉換爲long,因爲Math.round(double)返回類型爲long

1
(int) d/2.0 
(long) d * 2f 

你還是浮點運算,即一個操作數仍然是一個雙/浮動,因此,結果是雙/浮動。

"2" + x + 2 
"3" + 3 * x 

第一也只是級聯,即表達式的類型是String因此,所有的操作數被轉換成一個字符串。對於x=1,你會得到"212"

第二個是受操作者precendence,即*+之前被評估,因此表達3 * x是整數數學運算,其結果然後將通過"3" + result被轉換成一個字符串。

"5" + i + 2 

錯誤在於你的代碼,發佈異常。最有可能的是i是未定義的。

d++ + d 

查看運算符優先級和後增量運算符。 x++將返回x的值,然後增加它。然後將以前的值x添加到新值中。你可以認爲它與x + (x+1)相似。

當使用Math.round時,爲什麼它會將下面的double轉換爲float,還是它們是同一個東西?數學。

數學。round(x/d)

沒有轉換,只是一個重載的方法(一個取一個double,一個取一個float)。基本上floatdouble的精度要低,但都是浮點數。

2

此:

(int) d/2.0 

是一樣的:

((int) d)/2.0 

也許你的意思呢?

(int)(d/2.0) 

2.

他們都 「打印」 的字符串(假設你在談論使用它們作爲參數傳遞給System.out.println)。

這些:

"2" + x + 2 
"3" + 3 * x 

是相同的,因爲這些:

("2" + x) + 2 
"3" + (3 * x) 

可以相同,因爲這些(假設x = 10):

("2" + 10) + 2 
"3" + 30 

它們是相同的,因爲這些:

"2102" 
"330" 

我不記得是什麼應該發生在這裏。但是你永遠不需要/不想編寫這樣的代碼,所以沒關係!

4.

Math.round返回類型是整數類型,而不是一個浮點型。

0

其中一個問題太多。

  • 您正在轉換操作數,而不是表達式,並且類型將被提升。
  • 他們實際打印什麼,以及如何區分他們的類型?退房Java operator precedence
  • 因爲沒有i
  • 您可以打印結果。

Conversions and Promotions JLS section也可能有幫助;你的許多問題都在那裏回答。