java中:
public class Test1

public static void main(String[] args)
{int j=0;
   for   (int i=0;i<100;i++)
{      j=j++;}System.out.println(j);}
}
结果为零。
C中
#include <stdio.h>
void main()
{
    int i,j=0;
    for (i=0;i<100;i++)
    {
        j=j++;
    }printf("%d   ",j);    getch();
}
结果是100.
如何解释这样的结果呢?为什么两个中的结果不一样呢?如何解释赋值的过程?

解决方案 »

  1.   

    应该都是 0 吧。
    不太懂  C  getch(); 是什么啊。 会不会是这里的问题啊。
      

  2.   

    for   (int i=0;i <100;i++) 
    {       j=++j; } 
    这个就可以了;
      

  3.   

    c语句中的j++是作为整体赋值给j,传递的是表达式的值,而不是j的值,既:j=(j++);
    而java语句中正好相反,传递的是j的值。
    这是java 与c 一个异同
      

  4.   

       j++; 
    没有改变j的值.与语言和环境有关.有的改变,有的不改变.
    j=j++<==>j=j;
    j=0;固结果=0;
    公司面试就喜欢搞这些东西,其实没啥意思.
     
      

  5.   

                    int j = 0;
    for (int i = 0; i < 100; i++) { j = j++;
    //j++;
                            //j=++j;
    } System.out.println(j);
    如果把上面的改为j++; ,那么结果就是100。
    j = j++; 
    是先执行赋值,然后再执行自加操作。刚开始执行赋值语句j=0;但是自加之后的值没有保存起来。所以第二次循环执行的时候,还是先赋值,此时j的值还是0。然后一直这么循环下去,j的值没有发生变化。最终结果就是0。
      

  6.   

    5楼正解释
    to:10楼  i = ++j; ++在 前面也就是j先赋值然后在给i,结果当然是100了,这里面要搞清楚前置和后置的区别
      

  7.   

    5楼正解,还有1楼问getch()方法是什么意思,是等待接受输入一个字符
      

  8.   

    第一:j=0;
     j=j++;在这一步,j还是=0;
    你这样下去永远都是0
    j=++j;这就不会了。
      

  9.   

    由于java中j++首先返回j的值。所以赋值的时候j=j++首先是确定j++的返回值,为0,然后j++执行,这个时候j为1了,但是最后才执行赋值操作的。也就是将j的值又重新赋了刚才的返回值0;继续循环,也是一个道理。c语言中的区别在于最后才执行j++的操作。而java是先执行++操作。然后再赋值
      

  10.   

    11楼才是正解.j=j++.j++没有保存起来,此时j=0.然后j=j.所以一直是0;
      

  11.   

    再补充下:我这为这个问题大家没有必要去深究,也许是java的一个Bug吧。
    让我们看一段程序
    public class Test1 
    {  
    public static void main(String[] args) 
    {int j=0; 
       for   (int i=0;i <100;i++) 
    {       j++; //如果这里为j++他是可以保存的.} 
    System.out.println(j); 

    } 再者:
    public class Test1 
    {  
    public static void main(String[] args) 
    {int j=0; 
     int b=0;//这里定义一个b;
       for   (int i=0;i <100;i++) 
    {       j=b++;//注意看这里.这里用b来表示结果就正常,用j来表示结果就不对了.

    System.out.println(j); 

    } 运行结果就是正常的了。所以我觉得上面的说得基本上都不准确。也许是java Bug,期待高手来解答一下!
      

  12.   

    GET 是GETCHAR错了啊,不然不能运行,
      

  13.   

    楼上讲的很清楚.在JAVA中:
    j++:是先对j先运算再赋值因为j的初始值是0,而j++之后的值也即是0,然后再赋值给j.
    这样循环100次但所作的操作都是把j赋值为0.
    当然结果也就是0了.C语言结果是100,这应该是语言环境不一样所造成不同的结果.
      

  14.   

    j=j++ 这个是JAVA的基础问题,=右边是先复制后做加减的运算,这个时候j=0直接复制给j根本没有把j=0+1这个结果赋值给J
    j=++j 这个就是先做运算后复制,j相当于j=1+0;这样累加的结果就是j=1 这是第一次循环后结果
    j+=1 同上 int j=0;
    for(int i=0;i<100;i++)
    {
    j+=1; //结果为100
    j=j++;//结果为100
    j=++j;//结果为0

    }
    System.out.print(j);
      

  15.   

    在JAVA中
    j=j++,其实就是j=(j=j+1),是的初始值是0,即0=(j=j+1)即j=j+1=0.
    所以这就形成了一个圈..j永远是0.
    JAVA和C的运行机制不同导致了这个程序结果的不同...
    并不是JAVA的BUG..
      

  16.   

    再加一句....
    在内存中...
    j=j++ 先取局部变量j的值 ,压入操作数栈,而后对局部变量进行修改(加1),最后进行赋值操作,对操作数栈出栈,并将值赋给局部变量j.
      

  17.   

    27楼
    在JAVA中 
    1,j=j++,其实就是j=(j=j+1)2,0=(j=j+1)即j=j+1=0. 这两个式子都不成立吧!!
      

  18.   

    同意33楼问题在于 为什么 j=j++ 中 自加后的值没有被赋给j保存起来
    按照语法 j=j++ 等同于 j = j; j=j+1;啊 
      

  19.   

    这样的讨论没有多大的意义,不管是while 或是 for多少次,在java中赋值的都是j本身。而不是把++后的值赋给j
      

  20.   

    c语言中,不同编译器i=i++的结果就不同
    vc++6.0中i结果为1
    dev-c++中i结果为0
    vc++6.0不是完全符合c的标准
      

  21.   

    单独的j++和j=j++是不一样的,j=j++这里涉及2个运算符一个是=一个是+。
      

  22.   

    恩,同意!
    =的优先级比var++要低,所以先执行i++,返回结果。再赋值