Java 考虑这个代码:int s=20;int t=s+++--s&引用;。s和t的值是多少?

Java 考虑这个代码:int s=20;int t=s+++--s&引用;。s和t的值是多少?,java,operator-keyword,increment,decrement,Java,Operator Keyword,Increment,Decrement,直截了当地说,答案是“s是20,t无法确定。” 我知道s是20,但为什么t不能确定? 请帮帮我 int s = 20; int t = s++ + --s; 工作:增量(增量后)s至21(当前值20)+减量(预减量)s至20(当前值20) 在考虑了优先级和括号之后,Java保证表达式将从左到右求值。例如,要计算eat()+drink()-bemery(),Java将首先计算eat(),然后计算drink(),然后执行加法,然后计算bemery(),最后执行减法。eat()在drink()之前

直截了当地说,答案是“s是20,t无法确定。” 我知道s是20,但为什么t不能确定? 请帮帮我

int s = 20; 
int t = s++ + --s;
工作:增量(增量后)s至21(当前值20)+减量(预减量)s至20(当前值20)

在考虑了优先级和括号之后,Java保证表达式将从左到右求值。例如,要计算eat()+drink()-bemery(),Java将首先计算eat(),然后计算drink(),然后执行加法,然后计算bemery(),最后执行减法。eat()在drink()之前求值,因为eat()位于drink()的左侧,表达式的求值从左到右。这个保证很重要,因为eat()和drink()的调用可能会产生副作用,如果按相反的顺序调用,副作用会有所不同。

阅读:

由于递增/递减运算符修改其操作数,因此使用 在同一表达式中,这样的操作数可以多次生成 未定义的结果。例如,在表达式中,例如x− ++x、 是的 不清楚减法运算符和增量运算符的顺序 应该执行。这样的情况在 编译器应用了优化,这可能导致 操作的执行顺序不同于 程序员有意的

现在,你的答案应该很清楚。 在我看来,t的值可能因编译器/优化的不同而不同

以下是更多信息:

你在哪里找到了你给出的答案?
t
可以确定:你是否想过,哦,我不知道,试试看?“t无法确定”是。。。胡说八道。像这样的代码在现实生活中永远不会有用。。。你为什么感兴趣?投票重新打开:虽然表达式很难看,不应该在实际代码中使用,但我认为这个问题不是“太本地化”,因为答案是它在Java中定义良好(与C或C++不同),并且遵循Java需要使用的非常简单、自然的表达式求值规则。如果每个Java程序都必须遵循一组规则,那么这怎么可能“过于本地化”?Java开发人员理解这一点很重要(尤其是那些来自C世界的开发人员)。这个答案对C/C++有效,但对Java无效。看,你可能想解释一下你为什么要这样计算(比如从左到右,而不是从右到左)@JoachimIsaksson我按照你说的编辑了我的答案。谢谢
So, t=20+20;
And s =20;