易错点小消除--递增运算符

简介: 对于我们常见的递增运算符,如果不加以搞清楚,很容易会导致在默写细节的地方出错。特别是在边界条件的时候。比如说: int x=4; int y=5; y=x++; 我们都很容易就会知道答案是4,但是下面的情况稍不留神就会导致结果的大不相同咯。

对于我们常见的递增运算符,如果不加以搞清楚,很容易会导致在默写细节的地方出错。特别是在边界条件的时候。比如说:
int x=4;
int y=5;
y=x++;
我们都很容易就会知道答案是4,但是下面的情况稍不留神就会导致结果的大不相同咯。

    int x = 0;
    System.out.println(((x++)-(++x)));
    System.out.println(((++x)-(x++)));

运行结果:

-2
0

是不是感觉很不可思议啊,那么我们一起看一看代码的执行顺序吧。
首先对于第一个输出语句,我们都知道括号的优先级是高于逻辑运算的优先级的,所以程序先执行括号内的,按照从左至右的顺序依次执行,所以x=0,然后X自增为1,在自增为2,所以0-2=-2,这就是结果了;同样的按照这个方式我们也可以算出,第二个式子X先自增为1,然后减1,变为零,所以结果就是0;
虽然上面的结果看起来很奇怪,但是这就是真正的代码的执行原理。
下面再我们一起看一下X最后的取值到底是多少吧。这样才能真正的做到了然于胸:
第一个式子:

    int x = 0;
    System.out.println(((x++)-(++x)));
    System.out.println("x= "+x);
    //运行结果:
    /*
    -2
    x= 2
    */

第二个式子:

    int x = 0;
    System.out.println(((++x)-(x++)));
    System.out.println("x= "+x);
    //运行结果:
    /*
    0
    x= 2
    */

是不是感觉自己的逻辑一下字清晰了不少啊,文笔较拙,共同进步。

目录
相关文章
|
存储 Unix 编译器
初始C语言(6)——详细讲解表达式求值以及其易错点
初始C语言(6)——详细讲解表达式求值以及其易错点
207 0
|
4月前
|
Java
巧用枚举消除条件判断
`shigen`是一位致力于撰写博客文章的作者,记录个人成长历程,分享真知灼见,并捕捉生活中的感动瞬间。在其最新文章中,通过枚举的方式展示了如何优雅地消除if-else判断,提供了一种更为简洁清晰的代码实现方案。利用自定义的`QuestionHandlerEnum`枚举类,实现了不同情况下的逻辑处理,展示了此方法在提升代码可读性和内聚性上的优势。与`shigen`一同探索编程之美,让每一天都有所进步。个人IP:shigen。
18 0
巧用枚举消除条件判断
|
5月前
|
算法
聊聊一个面试中经常出现的算法题:组合运算及其实际应用例子
聊聊一个面试中经常出现的算法题:组合运算及其实际应用例子
|
8月前
|
C++
关系运算符及其优先次序:编程中的比较逻辑
在编程中,关系运算符是用于比较两个值之间关系的一种重要工具。它们帮助我们根据这些关系(如相等、不等、大于、小于等)来做出决策或执行特定的代码块。理解关系运算符及其优先次序对于编写正确和高效的代码至关重要。
172 0
|
8月前
|
测试技术
leetcode-241:为运算表达式设计优先级
leetcode-241:为运算表达式设计优先级
48 0
|
运维 Shell 数据安全/隐私保护
【运维知识高级篇】超详细的Shell编程讲解4(for循环+并发问题+while循环+流程控制语句+函数传参+函数变量+函数返回值+反向破解MD5)(一)
【运维知识高级篇】超详细的Shell编程讲解4(for循环+并发问题+while循环+流程控制语句+函数传参+函数变量+函数返回值+反向破解MD5)
196 0
逻辑操作符的短路现象
逻辑操作符的短路现象 1.逻辑操作符 2.逻辑操作符的短路
86 0
|
存储 Unix 编译器
表达式求值过程中会发生哪些隐藏的变化?求值顺序又由什么决定?——详解C表达式求值中的隐式类型转换,算术转换问题,以及操作符的属性
表达式求值过程中会发生哪些隐藏的变化?求值顺序又由什么决定?——详解C表达式求值中的隐式类型转换,算术转换问题,以及操作符的属性
177 0
|
存储 算法 前端开发
遇到括号有效性、下一个更大元素、特定的最小值,尝试栈
遇到括号有效性、下一个更大元素、特定的最小值,尝试栈
93 0
排列的时候如何避免重复?
排列的时候如何避免重复?
103 0

热门文章

最新文章