public class aa {
public static void main(String[] args) {
int i=0;
while(true){
i=i++;
System.out.println(i);
}
}}
这代码的结果很出人意料!!!
public static void main(String[] args) {
int i=0;
while(true){
i=i++;
System.out.println(i);
}
}}
这代码的结果很出人意料!!!
1、取出i值--》0
2、i自增变为1
3、将0赋值给i
所以。。永远是0
要么i = i + 1
要么直接 i++
因为i++可以写成,
temp=i;i=i+1;i=temp;可以去看下《java解惑》这本书,很多像这样有意思的问题!
i++可以写成:
temp=i;i=i+1;i=temp
可以去看下《java解惑》这本书,里面很多这样有意思的问题
i=i++; 改成i=(++i); 倒是有点意外!
我用Linux C在gcc编译器测试了一下,结果i是从1开始递增的,递增的。。
#include<stdio.h>
int main(int argc, char *argv[])
{
int i = 0;
while(1){
i = i++;
printf("%d\n", i);
}
}
{
class Program
{
static void Main(string[] args)
{
int i = 0;
while(true){
i = i++;
Console.WriteLine("i={0}\n",i);
}
}
}
}
i=i++;分解一下过程i=i; //i还是等于0
i=i+1; //i增为1
输出i的话就是1了;循环一次就递增一次
int i=0;
while(true){
i=i++;
System.out.println(i);
}
++;
首先后缀自加运算符是这样的,先取原值,再自加;
赋值运算符要比自加运算符等级要低一些
所以他的运算过程是:i取值,i自加,把取得值赋给i;
所以这段代码不管循环多少次都会无限输出0!
看来lZ不知道运算符的优先级!
Java code
int i=0;
while(true){
i=i++;
System.out.println(i);
}
首先后缀自加运算符是这样的,先取原值,再自加;
赋值运算符要比自加运算符等级要低一些
所以他的运算过程是:i取值,i自加,把取得值赋给i;
所以这段代码不管循环多少次都会无限输出0!
i=i++,取出i=0,然后让i自加1,然后把刚才取得的0再赋回给i,最后i还是0
i=i++是先将i=0赋给左边的i,再对右边的i++计算,但这个时候已经与i无关了,那是i++这个表达式的事