Java中x++和C语言中的x++有什么区别?

问题

前段时间,朋友问我一个问题,下面代码执行结果是什么?

1int i = 0; 2int x = 0; 3while(i<10){ 4 x = x++; 5 i++; 6} 7System.out.println(x);

我看完程序,肯定的说答案是10,但是朋友告我不对,答案是0。 相信有人跟我一样一脸懵,x++不是先进行赋值操作,在进行加1操作吗,x++整体运算完等于0,但此时x应该变成1了呀。

运行结果

抱着怀疑的态度我运行了一遍,结果如下 image image 然而我依旧不信邪,我又用C语言执行了一边,毕竟C是世界上最牛逼的语言,结果如下 image

原理

为什么两种语言运行出来的结果不一样呢,一般出现这种情况大概率是语言的底层逻辑不一样 对于Java是返回自增前的结果,无论x=x++怎么执行,x始终是0,自增操作始终没有赋值给x。 image 对于C语言是返回自增后的结果,x会先进行自增,并且赋值给x,尽管x++结果为0,但x此时已经是进行过自增的了。 image ::: tip 但是x=x++这行代码在c语言里属于未定义行为,不同的编译器会出现不同的运行结果。 :::

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

18个常用 webpack插件,总会有适合你的!

!(https://oscimg.oschina.net/oscnet/71317da0c57a8e8cf5011c00e302a914609.jpg)来源| https://github.com/Michaellzg/myarticle/blob/master/webpack/Plugin何为插

AssemblyScript 入门指南[每日前端夜话0xEB]

每日前端夜话0xEB每日前端夜话,陪你聊前端。每天晚上18:00准时推送。正文共:2459 字预计阅读时间:10分钟作者:DannyGuo翻译:疯狂的技术宅来源:logrocket!(https://oscimg.oschina.net/oscnet/b880277c594152a503

FLV文件格式

1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  

mysql设置时区

mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0