[英]what is the difference between additions?
我开始学习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。有什么区别? 绝对我需要使用其他变量?
与字符串一起使用时, +
运算符会进行字符串连接。 如果用+
将数字添加到字符串的末尾,则数字将首先转换为字符串。
您的声明:
System.out.print("a + b = " + a+b);
取字符串"a + b"
,并从串接的值a
作为一个字符串,然后从串接的值b
为字符串。
如果这样做,它将按照您想要的方式工作:
System.out.print("a + b = " + (a+b) );
(a+b)
的额外括号将导致在字符串串联发生之前对该加法进行求值(作为int
加法)。
+
并不总是意味着加法。 与字符串一起使用时,它会串联。
当你做
System.out.print("a + b = " + a+b);
您正在将a
和b
连接到字符串上。
换句话说,你在做
(("a + b = " + a) + b);
评估为
"a + b = 15" + b
评估为
"a + b = 1525"
当你做
c=a+b
接着
System.out.print("a + b = " + c);
您首先进行加法运算,然后将结果值(40)连接到String上。
在您的第一个代码中,当您说"a + b = " + a + b
,您正在执行字符串连接。 不管您添加到字符串中的是什么,字符串都会出现。
在您的示例中
首先"a + b = " + a
将变为"a + b = 15"
,然后b将被接触。
因此,它将变为a + b = 1525
在第二个示例中,您分别进行加法,然后连接到字符串。 这样您将获得理想的结果。
您也可以执行"a + b = " + (a + b)
。
问题在这一行:
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
(其中a
和b
是int
)等效于:
("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))
只要做System.out.print("a + b = " + (a+b));
使编译器可以理解,它必须先添加a and b
然后再进行连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.