int a =10; a+=a-=a*=a;
上面的两句,在JAVA与C++中有不一样的表现。它们的结果一个是-80,一个是0。是JAVA中是0,还是C++中是0,你知道吗?
在实验知道结果后,很容易解释。差别在于:右边的=运算完以后,前面的=左边的变量值是否发送了变化 。
但是深层的原因是怎么回事?我反正是不太了解,我是和一要好的同学闲聊时发现这样的问题的,希望有人能比较彻底的讲解一下。
注: 修改成a+=(a-=(a*=a));结果也没有变化,可见不关运算顺序,及运算符结合的问题
C++我用的是TruboC++,防止可能不同的编绎器实现不一样照成的争吵。
当然开发中,要是有人写出这样的代码肯定要被人骂.但是从语言的比较来说,或者是出于对语言的细节的学习.上面的代码还是很有意思的.
在java中赋值时会创建一个临时变量。
java在计算之前,值应该是都付好了
10+=(10-=(10*=10))
so, in java, it's -80. in c , it's 0.
上面的两句,在JAVA与C++中有不一样的表现。它们的结果一个是-80,一个是0。是JAVA中是0,还是C++中是0,你知道吗?
在实验知道结果后,很容易解释。差别在于:右边的=运算完以后,前面的=左边的变量值是否发送了变化 。
但是深层的原因是怎么回事?我反正是不太了解,我是和一要好的同学闲聊时发现这样的问题的,希望有人能比较彻底的讲解一下。
注: 修改成a+=(a-=(a*=a));结果也没有变化,可见不关运算顺序,及运算符结合的问题
C++我用的是TruboC++,防止可能不同的编绎器实现不一样照成的争吵。
当然开发中,要是有人写出这样的代码肯定要被人骂.但是从语言的比较来说,或者是出于对语言的细节的学习.上面的代码还是很有意思的.
在java中赋值时会创建一个临时变量。
java在计算之前,值应该是都付好了
10+=(10-=(10*=10))
so, in java, it's -80. in c , it's 0.