在 Java 中,在更大的算术表达式中使用赋值运算符的语法如何有效?

How is it valid syntax in Java to use an assignment operator in a larger arithmetic expression?

提问人:Aadivya 提问时间:2/15/2023 最后编辑:alcanAadivya 更新时间:2/15/2023 访问量:43

问:

背景:我主要是一名 Javascript/Python 开发人员,我做 Java 只是为了功课。

这是让我感到困惑的代码块。

public static void display(int a, int b) {
  a = a+b-(b=a);
  System.out.println(a);
  System.out.println(b);
}

我在练习考试中遇到了这个代码块。我以为这在语法上是不正确的,所以我用编译器尝试了一下。未出现语法错误。

我不明白这是有效的语法。我得到赋值运算符将赋值给,结果将是 的原始值。编译器如何注册为有效代码段?aba = a+b-(b=a)ab-(b=a)

Java 赋值运算符算 术表达式

评论

0赞 Jon Skeet 2/15/2023
为什么不呢?赋值表达式仍然是具有明确定义结果的表达式 - 请参阅 docs.oracle.com/javase/specs/jls/se10/html/...
1赞 khelwood 2/15/2023
b=a赋值并计算 的新值。bb
0赞 Thomas Kläger 2/15/2023
a = a+b-(b=a) 的结果将是 a 的原始值 - 否,结果是等于之前的值。整个结构类似于 Python:a + b - aba, b = b, a
0赞 markspace 2/15/2023
是的,这只是语法允许的东西。例如,当你们都想记住方法调用的结果,并利用该结果进行计算时,这很有用。 等。。。for( int c; (c = stream.read()) != -1; )
0赞 chris 2/15/2023
简短的回答:因为詹姆斯·高斯林(James Gosling)是这样决定的。稍微长一点的答案:鉴于 Java 作为“C 家族”语言的传统,即语法类似于 C,这个决定是可以理解的。赋值是具有明确定义值的表达式的概念在引入 Java 的原始目标群体(即 C 和 C++ 程序员)时很熟悉,James Gosling 认为没有理由将其删除。另一方面,Guido van Rossum在设计Python时有不同的优先级,对C / C++程序员的熟悉程度并不在他的首要级别。所以你有它,我猜。

答: 暂无答案