你知道i=i++;的含义吗?原理其实没有你想的那么简单
【摘要】 i++和++i我们都知道,但是你知道i=i++;吗?自上学时,老师就说i++是先赋值再加,而++i是先加再赋值,比如我们写个代码举下例子:i++:/** * 自增案例 */ public static void testZiZeng(){ int i = 1; int a = i++; System.out.println("a="+a); System.o...
i++和++i我们都知道,但是你知道i=i++;吗?
自上学时,老师就说i++是先赋值再加,而++i是先加再赋值,比如我们写个代码举下例子:
i++:
/**
* 自增案例
*/
public static void testZiZeng(){
int i = 1;
int a = i++;
System.out.println("a="+a);
System.out.println("i="+i);
}
其运行结果是:
a=1
i=2
++i:
public static void testZiZeng(){
int i = 1;
int a = ++i;
System.out.println("a="+a);
System.out.println("i="+i);
}
其运行结果为:
a=2
i=2
运行结果解释:
i的值没的说,不管是++i还是i++,都是在原来值的基础上自身加1,这个很好理解,不好理解的是a的值:
- 第一个案例中,a = i++;相当于是这样的,a = i,i++,那么a的值自然就是1了。
- 第二个案例,a = ++i,相当于i先++(此时i从1变成了2),然后在将i的值赋值个a,那么a自然而然也就成2了。
这一部分理解了,我们接着看下一个i=i++;
某天,给学生们写了一段代码:
public static void testZiZeng(){
int count = 0;
for(int i = 0;i<10;i++){
count = count++;
}
System.out.println("count="+count);
}
代码写完之后,问:“谁知道count的值是多少?”
王同学和刘同学在简单计算之后争相往起站:“老师,是10”,其他人也附和“没错,是10”,“对,就是10”……大家都陆陆续续的说出了自己心中的正确答案。
“小点声,你们说的是错的!别这么大声……”看着大家这么积极的回答,我不忍心的劝说道。
于是大家都用惊愕的眼神看着我,眼神里仿佛写着,十万个为什么。
其实正确答案是:
(点击空白处查看答案)
▼
count=0
接下来我们分析一下为什么?
点点下面的小卡片就是对我莫大的支持,谢过啦~
count++是一个表达式,是有返回值的,它的返回值就是count自加前的值,Java对自加是这样处理的:首先把count的值(注意是值,不是引用)拷贝到一个临时变量区,然后对count变量加1,最后返回临时变量区的值。
用代码解释为这样的:
int temp = count; //先把i变量的值10保存到临时变量中
count = count+1; // i变量的值加1操作
count = temp; //再把临时变量中的值赋值给i
程序第一次循环时的详细处理步骤如下:
- JVM把count值(其值是0)拷贝到临时变量区。
- count值加1,这时候count的值是1。
- 返回临时变量区的值,注意这个值是0,没修改过。
- 返回值赋值给count,此时count值被重置成0。
知道为什么了吧!
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)