首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java赋值操作符行为与C++

Java赋值操作符行为与C++
EN

Stack Overflow用户
提问于 2015-09-17 05:26:44
回答 1查看 740关注 0票数 5

这是在我处理“破解编码面试”问题时发生的:

编写一个函数来交换一个适当的数字(也就是说,没有临时变量)

我决定用Java编写我的解决方案(因为我计划在实习面试中使用Java )。

我想出了一个解决方案,我几乎相信答案是正确的(因为我是在一行中完成的):

代码语言:javascript
复制
    public static void main(String args[]) {
        int a = 5;
        int b = 7;
        a = b - a + (b = a);
        System.out.println("a: " + a + " b: " + b);
    }

当然,这段代码执行所需的结果。a == 7b == 5.

,这是有趣的部分。

这段代码不会在C++中运行,这本书后面也没有这个解决方案。

所以我的问题是:为什么我的解决方案有效?我假设Java所做的事情与其他语言不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-17 05:36:42

Java语言规范,第15.7节(评估命令)

Java编程语言保证操作符的操作数似乎是按照特定的计算顺序计算的,即从左到右。

因此,在Java中,评估顺序是很好定义的,并且可以按照您的预期执行。

C++规范没有提供这样的保证;实际上,它是未定义的行为,所以程序实际上可以做任何事情。

引用优先选择的话,注意到算术运算符的排序操作数不存在排序规则:

如果对标量对象的副作用相对于使用同一个标量对象的值计算而言没有排序,则行为是未定义的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32623124

复制
相关文章

相似问题

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