class aaa
{
public static void main(String [] args)
{
int i=10;
i=i++;
System.out.println(i);}}

解决方案 »

  1.   


    建议楼主在看下JAVA基础的知识。
      

  2.   

    i被赋值后可是自加了呀,所以应该是11吧把i=i++换成k=i++后,i的值就成11了,难道i=i++后i就不自加了吗?
      

  3.   

    i=i++; 
    这一句相当于
    i =i ;
    i=i+1;
    两句合并后的结果
     
      

  4.   

    应该是10,i=i++;的赋值语句中,右边的值是10,所以赋给左边的变量i也是10,语句结束
    程序改造成如下,还是有同样的结果:
    class aaa 

    public static void main(String [] args) 

    int i=10; 
    for(int j=0;j<10;j++){
    i=i++; 
    }
    System.out.println(i); } }
      

  5.   

    i = i++;
    是先计算右边的表达式的值(值为10),然后执行i=i+1,i变成11,然后执行赋值运算i=10
      

  6.   

    比如我们再来看i=(i++)+(i);
    表达式i++的值是10,然后i变成11,所以第二个i是11
    所以右边表达式为10+11=21,最后执行赋值i=21
      

  7.   

    这是一道经典题,曾经是sun公司的一道面试题,实际上并不像一些人理解的那么简单,很多人回答也是正确的,
    int i = 10;
    i = i++;
    System.out.println("i= "+i);
    上面打印的结果是10,为什么不是11呢?①i=②i++时,我们称呼这两个i分别是①i与②i,当a=b++;时,b会先取值再赋值然后再自增,所以i=i++;②i会先把10复制给①i,然后②i在自增1变成11,那么为什么System.out.println("i= "+i);打印的是①i而不是②i的值呢?
    sun公司官方给的解释是:编译器并不认为赋值号左右2个i的地址相同的,当②地址的值加1后,以后就使用①i,而②i就消失。
    因此现在编程中,良好的编程风格是i = i+1;而不再单纯的i++.
      

  8.   


    我认为a=xxx的赋值操作在b自增之后,而不是之前
    否则i = (i++)+(i); 这个就不对了,自增在赋值之后就得不到正确结果
      

  9.   

    如果是这样的话:
    public class AAA{
        public static void main(String [] args){
            int i=10;
            int y=0;
            y=i++;
            System.out.println("y=" + y + ", i=" + i);
        }
    }
    那么y的值为10,而i的值为11,所以说java还是有点玄机在里面的
      

  10.   

    还是10楼说得比较有道理。
    我本来也觉得应该是11的。因为i=i++;是先作赋值运算,再做自增运算的。
    比如: int i=10,j; 
    j=i++; 
    System.out.println(i); 
    System.out.println(j); 这里输出的是:
    11
    10
    但如果如10楼所说,打印的是①i而不是②i的值,那i的结果就是10了。
      

  11.   

    在Thingk in java中对于递增和递减是这样描述的:
    对于前缀++或者-- 应该是先执行运算再生成值 而后缀++或者--是先生成值在执行运算
      

  12.   

    要达到递增的结果,我们应该避免i=i++这种表达式(而应该用i++或i=i+1或k=i+1),它简直是个无效操作,我想10楼已经解释的很精确了。对于基本类型它唯一的作用就是改变存储此值的变量i在内存中的存储位置。
    正如以下代码:
    public static void main(String[] args){
       int i=0;
       Integer i=new Integer(0)//结果一样
       for(int k=0;k<5;k++){
          i=i++;
          System.out.print(i);//输出结果都是0
       }
       for(int k=0;k<5;k++){
          i++;
          System.out.print(i);//输出结果0,1,2,3,4,5
    }
     
      

  13.   

    i++,是先将i代入表达运算,当所有的运算完了以后,i再自加.
    ++i,是先将i自加后,再将i的值代入表达式运算.
      

  14.   


    那这个又怎么解释呢??
    int i=1;
      i++;
    println(i);
    照你这么说这个就该等于1咯!!!
      

  15.   

    对哦!!
    竟然跟c/c++的执行流程不一样!!!
    #include<stdio.h>
    void main()
    {
    int i=10;
    i=i++;
    printf("%d\n",i);
    }
    输出结果 11
      

  16.   

    这个跟C语言里的一样
    i=i++;
    这里,先进行i=i的赋值运算
    之后才是进行i+1运算。
    如果要让值为11的话,就应该改为:i=++i。
      

  17.   

    27楼说的很正确,不一样的编译器,不同的大的软件公司,甚至编程语言对于i=i++然后打印i,到底打印的是哪个i看法都是不一样的,不过sun公司认为打印的左边的i,那么咱们是学习java的,用的是sun公司的JVM当然是跟着sun公司走了,c++/c认为执行的是右i,不知道IBM是怎么的看法,只要注意到了这点疑惑性,以后编程培养自己的良好编程风格就行。
      

  18.   

    打印的不是1,是2,i++再打印i和i=i++再打印i是不一样的,i++是自增1后i不消失。i=i++等号右边的i赋值给左边i后,然后自增1后它就消失了,打印的是左边的i。
      

  19.   

    java里面的i=10的原因10楼说的很清楚,
    至于c里面为什么是11时因为编译器执行下面的步骤:
    i = i; //i = 10
    i++;   //i =11