public class Test
{
    public static void main(String[] args)
    {
        int m = 0;
        for (int i = 0; i < 100; i++)
        {
            m = m++;
        }        System.out.println(m);
    }
}打印的结果是?不运行程序,你能知道结果吗

解决方案 »

  1.   

    应该是0
    如果是
    for(){
    m++
    }
    才是100
      

  2.   

    m = m++; 是在m自加之前把值赋给了前面的m,所以一直是零;
    如果该为m = ++m; 就是100
      

  3.   

    应该是0,m++是在m加1之前就使用了,所以
    m=m++把0赋值给了m,所以在for循环中m一直是0
    最后结果为0
      

  4.   

    上面有一点说得不够明白,应该是m++中的m在m加1之前使用
      

  5.   

    问楼主个问题,m=m++;m虽然被赋成了0,但是这句执行完之后是不是应该有个内存里的值执行了++只是没有引用指向他了呢?
      

  6.   

    现在把题改改
    public class Test
    {
        public static void main(String[] args)
        {
            int m = 0;
            for (int i = 0; i < 100; i++)
            {
                m = m + m++;
            }        System.out.println(m);
        }
    }这会打印什么呢?
      

  7.   


    public class TNumCount {
    public static void main(String[] args) {
    int m = 0;
    for (int i = 0; i < 5; i++) {
    m = m++;
    // m++;
    // m = ++m;
    System.out.println(m);
    }
    System.out.println(m);
    }
    }
    学习一下~~
      

  8.   


    m=m++
    等价于
    int tmp = m;
    m = m + 1;
    m = tmp;所以结果是0
      

  9.   

    “在Java语言的程序运行过程中,变量在每一次被引用时,都会创建相应的对象实例,分配相应的内存区域,其中的内容不会被重写,在变量的生命周期内的每一次引用就会有一个临时的实例对象被建立,它们的值互不影响。”
      

  10.   

    应该是0。
    x++是先使用x的值再执行x=x+1。
    这里先使用了x的值 就是0,而x=x+1已经没有意义了,因为x=x+1只是运算过程而不是运算结果。
    所以 始终打印的是0。
      

  11.   

    考察编译原理基本功呀!!m=m++;这个表达式在不同语言下结果可能不同哦!java采用栈结构存储参数相当于
    int tmp=m
    m=m+1;
    m=tmp;
      

  12.   

    http://blog.csdn.net/ZangXT/archive/2008/11/05/3229281.aspx
    老问题了
      

  13.   

    0,我可没用什么软件喔 。因为是已经定义了int m=0;在先,如果打印语句在for里就不同了
      

  14.   

    现在把题改改 
    public class Test 

        public static void main(String[] args) 
        { 
            int m = 0; 
            for (int i = 0; i < 100; i++) 
            { 
                m = m + m++; 
            }         System.out.println(m); 
        } 
    } 这会打印什么呢?
      

  15.   

    [Quote=引用 43 楼 xiaochengfu1 的回复:]public class Test
    {
    public static void main(String[] args)
    {
    int m = 0;
    for (int i = 0; i  < 100; i++)
    {
    m = m + m++;
    }System.out.println(m);
    }
    }这会打印什么呢?
    还是0
      

  16.   

    op 操作从右开始弹栈
    m = m + m++; int tmp=(m++);
    int tmp2=m;
    m=tmp+tmp2;
      

  17.   

    受教了。在c++中位100,我倒是理解,在Java中为0就不懂了。
    不过,如果第一题为0,又按照 26 楼“在Java语言的程序运行过程中,变量在每一次被引用时,都会创建相应的对象实例,分配相应的内存区域,其中的内容不会被重写,在变量的生命周期内的每一次引用就会有一个临时的实例对象被建立,它们的值互不影响。”的解释。第二题应该也是0吧
      

  18.   

    第一题的答案是0,至于第二题  下面是我自己的一点意见
    不过 这种自加的方式 当数据大的时候容易使堆栈溢出 记得我们老师说应该少用
    i=0
    m(1)=1
    i=1;
    m(2)=3
    i=2
    m(3)=7
    i=3
    m(4)=15
    i=4
    m(5)=31m(2)=m(1)*2+1
    m(3)=m(2)*2+1
    m(100)=m(99)*2+1经过上面的分析:它相当于下面这样的一个递归函数
    function test(int n)
    {
        if(n==1)
           return 1;
       else
           return  test(n-1)*2+1;
    }
    当n的值为100的时候就是你的第二题的答案  我只是我自己的想法
      

  19.   


      m=m++;
    根据优先级分两步:
    1:m++ 先取值0再运算1
    2:赋值m=0;
    0----1----1的过程
      

  20.   


    那赋值完成后,m的++操作难道不执行了么!!!java的一个缺陷。但是可以用来考对Java的运行机制之类的东西。
      

  21.   

    我用C#调了,在for里面也一样是0,相信JAVA下应该也是的吧?
      

  22.   

    m=m++这条语句可化成这2条语句:
    t=m++;  //t=0,m=1 
    m=t;    //m=0
    ,所以最终m=0
      

  23.   

    我的理解:
    m=0;m++后,m还是0,所以不论怎么循环,m始终是0
      

  24.   


    偶像 你怎么会想到5050呢........这又没考你算法 应该是0因为上面直接就赋值 M=0 所以循环无所谓 再后面还是m=m++ 所以是先循环后++就是0了 如果是++m就是另一个答案了
      

  25.   


    就是c++ 也是 0 啊,这个应该就是m++ 和 ++m 
      

  26.   

    java的后++ 操作是这样的
    当遇到后++时
    java会用一块新内存,保存操作数的副本
    用副本参与运算,原操作数加1,
    所以此题目中:
    m=m++;
    m=m+m++;
    m实际上已经加了m,但此时m不在是以前的m(已经加1的)而是其副本(0)