2012-01-31 36 views
0

我開始學習Java ..我很興奮。
首先代碼不返回的結果我想..添加之間有什麼區別?

import java.util.Scanner; 
public class Yusuf 
{ 
    public static void main(String args[]) 
    { 
     Scanner text = new Scanner(System.in); 
     int a,b; 
     System.out.print("Enter first number:"); 
     a = text.nextInt(); 
     System.out.print("Enter second number:"); 
     b = text.nextInt(); 
     System.out.print("a + b = " + a+b); 
    } 
} 

這段代碼的結果是 「A + B = 1525」(舉例來說,如果A = 15和B = 25(我給隨機數))

上面爲什麼代碼沒有此代碼的工作,例如:

import java.util.Scanner; 
public class Yusuf 
{ 
    public static void main(String args[]) 
    { 
     Scanner text = new Scanner(System.in); 
     int a,b,c; 
     System.out.print("Enter first number:"); 
     a = text.nextInt(); 
     System.out.print("Enter second number:"); 
     b = text.nextInt(); 
     c = a+b; 
     System.out.print("a + b = " + c); 
    } 
} 

此代碼相同的數字返回40 .. 的區別是什麼?絕對我需要使用不同的變量?

回答

4

與字符串一起使用時,+運算符執行字符串連接。如果您將數字添加到+的字符串末尾,則數字將首先轉換爲字符串。

你聲明:

System.out.print("a + b = " + a+b); 

採取串"a + b"並連接從a作爲一個字符串值,然後從串接的b值作爲字符串。

它應該工作,你所希望的方式,如果你這樣做:

System.out.print("a + b = " + (a+b)); 

(a+b)額外的括號將導致除了進行評估(爲int加法)字符串連接發生之前。

+0

在某種意義上的操作優先權.. – Joseph 2012-01-31 01:29:02

+0

@Joseph - 實際上,這是在正常的操作符優先級/優先級之後。 – 2012-01-31 01:31:25

+0

「運算符優先級」是編程中通常使用的術語。首先對parens中的事物進行評估,然後將某些運算符先於其他人進行評估,如下所列:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html - 請注意,您可以「嵌套」括號,例如'(a + b)*(x /(y-6))' - 最內層的表達式首先被評估... – nnnnnn 2012-01-31 01:34:17

0

+並不總是意味着加法。與字符串一起使用時,它會進行串聯。

當你

System.out.print("a + b = " + a+b);

你串聯ab到字符串。

換句話說,你在做

(("a + b = " + a) + b);

計算結果爲

"a + b = 15" + b

計算結果爲

"a + b = 1525"

當你

c=a+b

然後

System.out.print("a + b = " + c);

你做加法第一,然後您連接所得到的值(40)到所述字符串。

+0

我需要在某種意義上創建新變量? – Joseph 2012-01-31 01:14:12

+1

你需要不要做字符串連接。 – hvgotcodes 2012-01-31 01:15:09

0

在你的第一個代碼中,當你說"a + b = " + a + b時,你正在做一個字符串連接。無論你添加到一個字符串將會出現一個字符串。

在你的榜樣,

第一"a + b = " + a將成爲"a + b = 15"然後B將被contactenated。

因此,它將成爲a + b = 1525

凡在你的第二個例子,你分別在做加法然後連接字符串。所以你正在得到理想的結果。

你也可以做"a + b = " + (a + b)

0

的問題是在這條線:

System.out.print("a + b = " + a+b); 

在「A + B」的「+」操作符被解釋爲一個字符串連接不是整數加法。

它改成這樣:

System.out.print("a + b = " + (a+b)); 

你必須做,這是對的「+」操作符重載決策規則的組合,以及基本的Java運算符優先級規則的原因。

  • 如果操作數的「+」是一個字符串,那麼操作者是字符串連接,並且非字符串操作數(如果有的話)被轉換爲字符串。

  • 如果您有x op y op z其中'op'是相同的運算符,那麼它相當於(x op y) op z


如果你這身打扮,"a + b = " + a+b(其中abint)等同於:

("a + b = " + a) + b 

,因此

"a + b = ".concat(Integer.toString(a)).concat(Integer.toString(b)) 

的更正"a + b = " + (a + b)是相當於:

"a + b = ".concat(Integer.toString(a + b)) 
0

只是做System.out.print("a + b = " + (a+b));這樣編譯器可以理解,它必須先添加a and b比串連。

相關問題