2012-01-31 38 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比串连。

相关问题