类型转换为int和string,java

时间:2010-12-08 18:54:55

标签: java string integer

上次考试我们进行了练习以确定以下代码的输出:

System.out.println(2 + 3 + ">=" + 1 + 1);

我的回答是5 >= 2,但现在我意识到这是错误的答案。它应该是5 >= 11。 但为什么呢?

5 个答案:

答案 0 :(得分:18)

假设您的语法是:

System.out.println(2 + 3 + ">=" + 1 + 1);

表达式从左到右进行评估,在这种情况下,2 + 3总和为5,当“{”添加到字符串结果为"5 >="时,将其添加到1给出"5 >= 1",添加另一个1,结果是:"5 >= 11"

答案 1 :(得分:11)

因为“添加”字符串会导致连接。以下是在编译阶段评估它的方法:

((((2 + 3) + ">=") + 1) + 1)

编译器将执行常量折叠,因此编译器实际上可以一次减少一个表达式,并替换为常量表达式。但是,即使它没有这样做,运行时路径实际上也是一样的。所以你走了:

((((2 + 3) + ">=") + 1) + 1) // original
(((5 + ">=") + 1) + 1)       // step 1: addition      (int + int)
(("5>=" + 1) + 1)            // step 2: concatenation (int + String)
("5>=1" + 1)                 // step 3: concatenation (String + int)
"5>=11"                      // step 4: concatenation (String + int)

您可以通过用括号括起第二个数字加法表达式来强制整数加法。例如:

System.out.println(2 + 3 + ">=" + 1 + 1);   // "5>=11"
System.out.println(2 + 3 + ">=" + (1 + 1)); // "5>=2"

答案 2 :(得分:3)

Number+number=number
number+string=string
string+number=string
etc.

答案 3 :(得分:1)

从左到右进行评估。您将"1"连接到"5 >=",最后连接"1"连接到"5 >= 1"

答案 4 :(得分:1)

让我们从左到右一次读取一个令牌:

遇到的第一个文字是整数2,然后是+,然后是另一个整数3。两个整数之间的+是加法,因此将它们加在一起为5

现在我们有5,一个整数,然后是+,然后是一个字符串">="。整数和字符串之间的+是连接运算符。因此,字符串组合形成"5>="

然后我们有"5>=",一个字符串,一个+,然后是一个整数1。这又是String连接。结果是"5>=1"

最后我们有"5>=1",一个字符串,一个+和一个1。他的字符串串联再次出现。结果是"5>=11"