一个比较有意思的小问题

gudu_yueliang 2006-04-05 09:43:33
int x = 0;  
   
    x = x++;

在java等于0 在c中等于1
谁能解释一下为什么在java中就等于0呢?
有人说跟编译器的优先级有关,但我还是不理解
如果在x = x++中等于的优先级大,那么就是先计算x=x 在计算x++那么就应该等于1
如果相反,那么就是先计算x++在计算x=x那么还是应该等于1.所以我怎么也不明白为什么
在java中等于0,有没有谁能解释一下为什么会出现结果是0呢
...全文
275 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
classjava 2006-04-08
  • 打赏
  • 举报
回复
java:
int x = 0;//x=0  
x = x++//把(x++)的值0赋给x
yarkqiu 2006-04-08
  • 打赏
  • 举报
回复
这个问题我来说一下。
运算符的优先级,Java和C是一样的。
我不知道你用C语言是什么编译器,C语言不同的编译器关于“++”或“--”运算的结果会不同。
这个问题在《最新Java核心技术I》里讨论过。“++”和一个变量单独组成一个语句(如:x++,++x),无论是“++”在变量前还是后运算结果和“x=x+1;”是一样的。只有把他放在一个表达式中作为表达式的一部分,就比如你说的“x = x++”,“++”在前在后就有区别了(具体的,在C语言和JAVA中对自增运算符都有说明,我就不说了。)


你的明白!
nowordseagle 2006-04-06
  • 打赏
  • 举报
回复
这个问题今天刚试过 j=j++ ;前后两个 J不是同一个J java里的++ 与 C++ 里的++确实 有写不同
但这里却不全是优先级的问提 . j=j++ 写一百遍看看是什么效果 j 还是不变 原因就是地 二个j 是第一个j的副本 即使j=j++运行一百遍 每次都是 把j的副本j(等于他本身)赋值给j 然后副本++ 然后副本消失

麦子_9 2006-04-06
  • 打赏
  • 举报
回复
qiang029(风)
--------------
楼上说的有道理.
copine 2006-04-06
  • 打赏
  • 举报
回复
doubt
qiang029 2006-04-05
  • 打赏
  • 举报
回复
我来小说一下我的理解,在JAVA中X++是先进行赋值再进行++,而++X是先进行++再进行赋值,也就是说
int x = 0;  
    x = x++;
在JAVA中++的优先级大于=号,那么先算x++是0,由于是先进行赋值再进行++所以x最后还是等于0,说白了x=x++;和x++是一样的。
在c中,没试过可能是先++再赋值最后变成1了。
duye 2006-04-05
  • 打赏
  • 举报
回复
还真不知道有这个怪现象,我坐一下沙发。

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧