社区
Java SE
帖子详情
i++与赋值操作问题
wqxtt
2001-06-19 01:39:00
int i =0;
i=++i;
System.out.println(i);
这段代码运行结果怎么是0,不是1?
是不是java的赋值操作有什么特别的地方?
...全文
266
16
打赏
收藏
i++与赋值操作问题
int i =0; i=++i; System.out.println(i); 这段代码运行结果怎么是0,不是1? 是不是java的赋值操作有什么特别的地方?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
luodi
2001-06-21
打赏
举报
回复
在Java 中表达式的运算次序在语言规范里已经定义好了,所有平台上的JVM都应该是一样的,不存在二义性。
但是在C/C++中,由于ANSI C并没有规定必须遵守的运算次序,因此这个运算的结果要取决于编译器的具体实现了。
zhuzhichao
2001-06-20
打赏
举报
回复
這樣肯定是0;
因為i++是0
所以i = i++後
i是0
chen0712
2001-06-20
打赏
举报
回复
肯定呀!!i=i++表示将i的初始值赋0给i后,i自身再加1,所以print出来的是0而不是1,如果下次使用i这个变量时,它的值才会是1。
sfireball
2001-06-20
打赏
举报
回复
真正的过程是这样的
分为两部分
evaluate 从左到右 i evalute 为0 然后 i++ evaluate 为0
assignment从右往左 i= (i++ evaluate 出来的值 也就是 0)
Dureek
2001-06-19
打赏
举报
回复
顺便说一句, 由于运算顺序的问题, 在C中的结果是1 :)
Dureek
2001-06-19
打赏
举报
回复
比如这样一个class:
public class test {
public static void main(String[] args) {
int a = 5;
a = a++;
System.out.println(a);
}
}
用javap来看看(编译后javap -c test):
(略去前面一些与此关系不大的部分)
0 iconst_5 // 常数5压入堆栈中
1 istore_1 // 从堆栈中弹出赋值给索引为1的变量(这个时候a=5)
2 iload_1 // *将后面那个a(索引为1的变量)的值压入堆栈中(为了以后的赋值)
3 iinc 1 1 // 执行a++, 此时堆栈无任何变化!(这个时候a=6)
6 istore_1 // 从堆栈中弹出赋值给a(这个时候a变成了5)
// 下面就不用看了, 呵呵 ...
7 getstatic #2 <Field java.io.PrintStream out>
10 iload_1
11 invokevirtual #3 <Method void println(int)>
14 return
值得注意的是上面打星号的那一行, 我想我还得举个例子来说明:
事实上, a = a++中, 赋值给a永远都是最后一步, 而并非想象的a=a, 然后再a++ ... 为了描述上的方便, 做一下替换, 变成a=i++, 执行的过程如下:
先把i压入堆栈中, 然后i++(i的值增加了1), 接着把i从堆栈中弹出赋给了a ...
把这里的i换成a=a++中后面的那个a, 再结合上面javap提供的信息来看就应该能明白是怎么回事了, 呵呵 ...
Good luck :)
niuji
2001-06-19
打赏
举报
回复
i++先使用i再将i加一
++i相反
wqxtt
2001-06-19
打赏
举报
回复
加1操作的对象不也是i吗??
llgg008
2001-06-19
打赏
举报
回复
服了你了!下回弄明白了再问嘛!同意楼上的兄弟:i=i++是先赋值再加1,i=++i是先加1后赋值。
hexiaofeng
2001-06-19
打赏
举报
回复
i=0
i=i++
i=0
i=0
i=++i
i=1
ender
2001-06-19
打赏
举报
回复
:)
(i=i)++
i=(i++)
Anreddy
2001-06-19
打赏
举报
回复
result is 1,not zero.
if i=i++; the result is 0;
because the operation direction is from left to right.
wqxtt
2001-06-19
打赏
举报
回复
不好意思,写错了。应该是i=i++,呵呵。。
各位再试试
lelf2000
2001-06-19
打赏
举报
回复
我出来的是1
sfireball
2001-06-19
打赏
举报
回复
是1
airhorse
2001-06-19
打赏
举报
回复
这样都行,真有你的,
关于 i = i
++
两次
赋值
问题
理解
关于 i = i
++
两次
赋值
问题
理解 文章目录前言 前言 以前曾经被一个看似简单,但是答案却很神奇的题目一直困扰着。题目如下: public class Test{ public static void main(String[] args){ int i=0; i=i
++
; ...
i
++
和
++
i的真正区别
i
++
是先
赋值
,然后再自增;
++
i是先自增,后
赋值
。 用代码表示就是: 若 a = i
++
; 则等价于 a=i;i=i+1; 而 a =
++
; 则等价于 i=i+1;a=i; 那么事实真是这样么,只是曾经我深信不疑,但是直到我看到下面这段代码:@...
++
运算符和
赋值
运算
++
运算符与
赋值
运算 简单介绍
++
运算符
++
和-- 都是运算符,使用的场景还有单独使用和组合使用的区别;...简单的
赋值
操作
就会报错,是因为在
赋值
操作
之前a+1的结果已经变成了int类型,int类型
赋值
给byte类型是需
你真的理解 i
++
与
++
i 吗? 瞧,超详细的底层原理分析~
注意,以下讨论的语言是 Java ... i
++
先
赋值
在运算,例如 a=i
++
,先
赋值
a=i,后运算i=i+1,所以结果是a==1
++
i 先运算在
赋值
,例如 a=
++
i,先运算i=i+1,后
赋值
a=i,所以结果是a==2 然后给了成吨的例子来说...
java i 和i,详解Java中i
++
和
++
i的区别
i
++
:先
赋值
再自增先在i所在的表达式中使用i的当前值,后让i加1
++
i :先自增再
赋值
让i先加1,然后在i所在的表达式中使用i的新值以下列java代码为例: 运算结果为: 这表明: i
++
是指先把i=0的值
赋值
给j, 然后再自身...
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章