繁体   English   中英

添加之间有什么区别?

[英]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);

您正在将ab连接到字符串上。

换句话说,你在做

(("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 (其中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))

只要做System.out.print("a + b = " + (a+b)); 使编译器可以理解,它必须先添加a and b然后再进行连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM