首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java算术:为什么它们不是"9 = 9"?

Java算术:为什么它们不是"9 = 9"?
EN

Stack Overflow用户
提问于 2019-03-20 04:48:15
回答 4查看 115关注 0票数 1

我有一个关于带整数和字符串的java算术的问题。例如,

代码语言:javascript
运行
复制
int a = 1;
int b = 3;
int c = 5;
System.out.println(a + b + (c + " = ") + a + (b + c));
System.out.println((a + b) + c + " = " + a + b + c);
System.out.println(a + (b + c) + " = " + (a + b) + c);

以上代码分别输出"45 = 18“、"9 = 135”和"9 = 45“。我不明白这次行动背后的逻辑。我的第一反应是他们都输出了"9 = 9“。我希望有人能帮我理解这次行动。我很感激你的帮助!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-03-20 04:54:33

加法是左关联的,但括号可以改变执行顺序。

因此,如果我们必须在这里分解第一个println,当我们编写a+b时,它会导致算术加法(5),但是当我们执行c + " = " + a + b + c时,它会导致字符串级联5=9,因为c + " = "首先计算并将表达式作为String + int操作,从而导致字符串连接。记住,int+intintString+intString

由于括号(),表达式的计算方式发生了变化。如果我们包含括号,上面的表达式就是这样计算的。

代码语言:javascript
运行
复制
(c + " = ") + a + (b + c)
 - First it evaluates (c + " = "), so the expression becomes 5 = + a + (b + c)
 - Now it evaluates b+c because of parenthesis, , so the expression becomes 5 = + a + 8
 - Now as there are not parenthesis, it evaluates the expression from left to 
   right and as the first operand is string, the whole expression becomes a
   string concatenation operation

第一表达式的完全分解

代码语言:javascript
运行
复制
a + b + (c + " = ") + a + (b + c)
- First precedence is of (b + c), so now it becomes a + b + (c + " = ") + a+8
- Next precedence  is of (c + " = "), so now it becomes a + b + "5 = " + a+8
- Now as there is not (), expression is evaluated from left to right, so
  now it evaluates a + b , so it becomes 4 + "5 = " + a+8
- now it evaluates '4 + "5 = "', so it becomes `45 = a + 8`, because we have 
  now a string in the expression, so it does string concatenation
- and it becomes `45 = 18`

类似地,您可以分解另外两个表达式。

票数 2
EN

Stack Overflow用户

发布于 2019-03-20 04:56:03

这里的要点是,您正在将int加法+与字符串连接+操作混合在一起。

在计算1+3时,生成4,然后将其放在"5 = 1“字符串前面,然后是5+3 (8)的结果。

不同的结果是基于不同的效果放置支撑。

票数 1
EN

Stack Overflow用户

发布于 2019-03-20 05:04:06

如果您将int与字符串连接在一起,那么它将导致字符串,并通过添加括号来更改您的示例的执行结构: System.out.println(a +b+ (c + ") +a+ (b + c));

  1. (b + c)将解析为8
  2. (c + " = ")将被解析为"5=“
  3. 在语句开头的a + b将导致4
  4. a + b + (c + " = ")此语句将成为字符串值4+"5=“,输出将为"45=”。
  5. 然后,这将与a + b + (c + " = ") +a连接,生成"45=“+1,并生成"45=1”。
  6. 因此,整个语句将被a + b + (c + " = ") + a + (b + c)解析为"45=1“+8,因此最终结果是"45=18”。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55253752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档