java for循环里的第一个表达式执行几遍?
大牛解释下i++生效了没
/** * 存疑?第一个条件怎么解释? * @methodName: forTestA4 * @description: * @param * @return void * @throws # @eg: */ public static void forTestA4() { int sum = 0; int i = 10; for (i = i++; i <= 10; i++) { System.out.println(i); sum += i; } System.out.println(sum); }
for语句执行流程第一个条件,
i=i++是给循环变量赋初值,结果就是i=0,这个语句就结束了。
然后判断i<=10,进入循环体,打印0,之后执行循环条件i++,再判断i<=10,再执行循环体。
不过 i=i++倒是挺有趣的,网上可以搜到大致是这么解释的【1、java运算符的优先级++符是大于=的。
2、The result of the postfix increment expression is not a variable, but a value.后++符表达式的结果是个值而不是一个变量。
也就是说后++符先将自己的值存储起来,然后对变量进行++;
再进行赋值操作,也就是将先存储起来的值赋给变量i,这样的操作就导致了i值被置为0了】
只执行一次,i的初始值你就赋值10了,第二个条件你是i<=10,到第二次循环时已经不符合要求了,最后输入的是i和sum的值都是 10
首先表述一下本题for循环的过程,无疑问肯定三个表达式执行不执行,执行几遍的问题:
答:
* 1.初始化条件: "++" 的优先级大于 "=",并且 "i++" 是先试用再自加1,所以这里的i依然为10;条件初始化完成(i=10)初始条件永远不会再次执行
* 2.判断 : 10<=10成立,执行循环体 sum=10;
* 3.依据2中的判断决定第三个表达式的执行与否: 2条件成立,执行i++(此时i=11)
接下来便是i++底层设计了(引用生气的萝卜这位朋友的理解):
这个问题涉及到 i++ 底层的运算方式; i = i++;不会改变 i 的值。实际上自增的动作是发生在 赋值 之前的。
具体发生事件大概是这样
1、jvm将 i 的值存储到临时变量 temp = 10;
2、i 本身的自增 i = 11;
3、赋值:将临时变量temp的值赋给 i
所以:最后得到的 i 仍然是 10
- 等 最代码怎么获取牛币啊?
- 完 谁来告诉我最代码上线的时间,答对者给5牛币,先来先得
- 等 牛友们,大家好,你们做程序员多久了?现在还好吗?
- 完 在微信打开的页面里进行app下载
- 等 最代码2014年欢乐聚声会
- 完 mysql如何查询表数据并且对3个字段降序的SQL?
- 完 最代码牛币机制改革
- 完 成功的在bae上使用了自定义运行环境 jetty+nginx的组合,大家对jetty+nginx优化有哪些心得?
- 完 进来分享一下各位牛牛是如何加入最代码大家庭的?
- 等 为什么java BufferedImage类处理大图直接抛出内存溢出的异常?
- 等 最代码是否开发手机app客户端?
- 完 java程序员学习哪些java的技术?java有哪些框架?都能做哪方面的开发?
- 等 php格式网页文件怎么运行?
- 等 Java volatile值获取的问题
- 等 前端vue,拦截了登录后台后,返回的token,requests拦截token,但是发送请求的时候,就出现跨越异常
- 等 大专本科计算机科班怎么找到Java工作?
- 等 eclipse怎么把三个java swing游戏项目合成一个项目?
- 完 伙伴们,大家都有什么好的解压方式么,分享一下~
- 完 三四线城市,6、7k,运维工作,索然无味,想去辞职上培训,各位牛牛有什么建议嘛
- 等 jsp页面输入中文变成问号
- 等 JPA在线上运行一段时间后报错Caused by: java.lang.IncompatibleClassChangeError: null
- 等 PHP 这个规则用preg_match_all怎么写
- 等 大佬们,有没有知道Alfresco如何配置LDAP登录呢?
- 等 php的install目录是框架带的吗?