live的gravatar头像
live 2016-06-30 14:46:51

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);
    }
所有回答列表(13)
ljf_zdm的gravatar头像
ljf_zdm  LV2 2016年6月30日

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了

tingxue的gravatar头像
tingxue  LV2 2016年6月30日

0

yjx4510013的gravatar头像
yjx4510013  LV9 2016年7月1日

只执行一次,i的初始值你就赋值10了,第二个条件你是i<=10,到第二次循环时已经不符合要求了,最后输入的是i和sum的值都是 10

Evan_Wu的gravatar头像
Evan_Wu  LV4 2016年7月1日

只循环一次,你的i值被初始化为10,然后i<=10的条件成立,然后输出i的值为10,接着执行i++,i变成11,不符合i<=10,所有循环结束,然后就输出sum的值也为10.

mySong的gravatar头像
mySong  LV11 2016年7月1日

int i = 10;
  i = i++;
  i = i++;
  i = i++;
  System.out.println(i);

这个结果 打印的时候 还是10  ;所以现在值得疑问的是 i++ 到底代表什么呢  ?

生气的萝卜的gravatar头像
生气的萝卜  LV2 2016年7月2日

无疑执行一遍

这个问题涉及到   i++   底层的运算方式; i = i++;不会改变 i 的值。实际上自增的动作是发生在 赋值 之前的。

具体发生事件大概是这样

1、jvm将 i 的值存储到临时变量 temp = 10;

2、i 本身的自增 i = 11;

3、赋值:将临时变量temp的值赋给 i

最后得到的 i 仍然是 10

lianbiao的gravatar头像
lianbiao  LV1 2016年7月2日

运行一下不就知道了……直接赋值10了,第二遍就不行了…

wentao的gravatar头像
wentao  LV24 2016年7月3日

没有套路的华,第一个表达式满满都是真诚。只执行一次

qiqilie的gravatar头像
qiqilie  LV4 2016年7月4日

很厉害的感觉学习啦

淡淡人生过的gravatar头像
淡淡人生过  LV7 2016年7月5日

只执行一次,

第一次i=10,

所以,

i<=10,

输出i是10,

sum+=i;

输出的值就是10

冰心的水的gravatar头像
冰心的水  LV3 2016年7月6日

for循环第一个表达式是初始化循环条件的,可以为空,第一个表达式永远就执行一遍;首先i=i++;根据运算符优先级,先计算单目运算i=(i++)=10

楼兰绘梦丶的gravatar头像
楼兰绘梦丶  LV3 2016年7月7日

只循环一次,你的i值被初始化为10,然后i<=10的条件成立,然后输出i的值为10,接着执行i++,i变成11,不符合i<=10,所有循环结束,然后就输出sum的值也为10

live的gravatar头像
live  LV7 2016年8月18日

首先表述一下本题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

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友