public class aa {
   public static void main(String[] args) {
   int i=0;
   while(true){
   i=i++;
   System.out.println(i);
   }
     
     
    }}
这代码的结果很出人意料!!!

解决方案 »

  1.   

    http://www.ticmy.com/?p=43
      

  2.   

    其实关键就是i=i++这句话:
    1、取出i值--》0
    2、i自增变为1
    3、将0赋值给i
    所以。。永远是0
      

  3.   

    项目中见过别人这么写的,
    要么i = i + 1
    要么直接 i++
      

  4.   

    0
    因为i++可以写成,
    temp=i;i=i+1;i=temp;可以去看下《java解惑》这本书,很多像这样有意思的问题!
      

  5.   

    0
    i++可以写成:
    temp=i;i=i+1;i=temp
    可以去看下《java解惑》这本书,里面很多这样有意思的问题
      

  6.   


    i=i++; 改成i=(++i); 倒是有点意外!
      

  7.   

    i=i++这样赋值确实是朵奇葩,每次循环都是i=0。所以打印出来都是0.这种问题确实比较麻人,多画画图。
      

  8.   


    我用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);
    }
    }
      

  9.   

    用Visual Studio 2008测试也是同上,不是0啊
      

  10.   

    狗血的,测试了一下C#,C#输出也是0using System;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                int i = 0;
                while(true){
                    i = i++;
                    Console.WriteLine("i={0}\n",i);
                }
            }
        }
    }
      

  11.   

    不是这样吗??
    i=i++;分解一下过程i=i;        //i还是等于0
    i=i+1;        //i增为1
    输出i的话就是1了;循环一次就递增一次
      

  12.   

    LZ应该清楚 i++ 和 ++i 的区别吧
      

  13.   

    看来lZ不知道运算符的优先级!
    int i=0;
    while(true){
    i=i++;
    System.out.println(i);
    }
    ++;
    首先后缀自加运算符是这样的,先取原值,再自加;
    赋值运算符要比自加运算符等级要低一些
    所以他的运算过程是:i取值,i自加,把取得值赋给i;
    所以这段代码不管循环多少次都会无限输出0!
      

  14.   

    [Quote=引用 38 楼  的回复:]
    看来lZ不知道运算符的优先级!
    Java code
    int i=0;
    while(true){
    i=i++;
    System.out.println(i);
    }
    首先后缀自加运算符是这样的,先取原值,再自加;
    赋值运算符要比自加运算符等级要低一些
    所以他的运算过程是:i取值,i自加,把取得值赋给i;
    所以这段代码不管循环多少次都会无限输出0!
      

  15.   

    0啊。没问题
    i=i++,取出i=0,然后让i自加1,然后把刚才取得的0再赋回给i,最后i还是0
      

  16.   

    是i++不是++i,
    i=i++是先将i=0赋给左边的i,再对右边的i++计算,但这个时候已经与i无关了,那是i++这个表达式的事