我遇到了增量运算符的一个奇怪问题。下面的代码应该输出什么?
$j = 0;
for ($i=0; $i<100; $i++)
{
$j = $j++;
}
echo $j;
它回声0为什么不是100?
编辑:当我改变$j = $j++
$j = ++$j
到,它呼应100
我遇到了增量运算符的一个奇怪问题。下面的代码应该输出什么?
$j = 0;
for ($i=0; $i<100; $i++)
{
$j = $j++;
}
echo $j;
它回声0为什么不是100?
编辑:当我改变$j = $j++
$j = ++$j
到,它呼应100
你正在做一个“后增量”,因为++
出现在它正在修改的变量之后。该代码,在更短的紧凑的形式写出来,可以归结为:
for ($i = 0; $i < 100; $i++) {
$temp = $j; // store j
$j = $j + 1; // $j++
$j = $temp; // pull original j out of storage
}
如果你有++$j
,则j将首先增加,产生的增加值将被分配回J.然而,这样的结构使很少有意义。你可以简单地写出来
for (...) {
$j++;
}
其归结为
for (...) {
$j = $j + 1;
}
感谢Marc B,你解决了我的困惑,$ j ++先存储了值,所以它变成了0最后。当使用++ $ j时,它首先添加值! – steve 2012-02-18 02:55:28
的问题是与线
$j = $j++;
该命令评估$j
为0,然后递增$j
为1,最后把0赋值回$j
。
可以使用$j = $j + 1;
或者只是$j++;
。
或者只是做$ j = ++ $ j;' – 2012-02-18 02:46:16
@AaronW。这会起作用,但这是多余的和混乱的。我的团队永远不会允许它通过代码审查。 – 2012-02-18 02:47:40
$j++
是后递增:表达式的值是$j
,然后$j
递增。所以你得到j的值,然后递增j,然后将j设置为j的原始值。
您正在使用后缀增量,它会在增量前分配变量的值。所以'$ j' = 0每次。 '++ $ j'会在赋值之前进行递增。当然,你可以完全跳过作业,并自己做'$ j ++'... – Interrobang 2012-02-18 02:46:16
这将是一个很好的面试问题。 – Umbrella 2012-02-18 02:51:30
@伞:这可能是一个很好的电话屏幕问题,以帮助您决定是否值得邀请候选人在现场。 – 2012-02-18 17:43:00