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.
如何解释这样的结果呢?为什么两个中的结果不一样呢?如何解释赋值的过程?
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.
如何解释这样的结果呢?为什么两个中的结果不一样呢?如何解释赋值的过程?
不太懂 C getch(); 是什么啊。 会不会是这里的问题啊。
{ j=++j; }
这个就可以了;
而java语句中正好相反,传递的是j的值。
这是java 与c 一个异同
没有改变j的值.与语言和环境有关.有的改变,有的不改变.
j=j++<==>j=j;
j=0;固结果=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。
to:10楼 i = ++j; ++在 前面也就是j先赋值然后在给i,结果当然是100了,这里面要搞清楚前置和后置的区别
j=j++;在这一步,j还是=0;
你这样下去永远都是0
j=++j;这就不会了。
让我们看一段程序
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,期待高手来解答一下!
j++:是先对j先运算再赋值因为j的初始值是0,而j++之后的值也即是0,然后再赋值给j.
这样循环100次但所作的操作都是把j赋值为0.
当然结果也就是0了.C语言结果是100,这应该是语言环境不一样所造成不同的结果.
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);
j=j++,其实就是j=(j=j+1),是的初始值是0,即0=(j=j+1)即j=j+1=0.
所以这就形成了一个圈..j永远是0.
JAVA和C的运行机制不同导致了这个程序结果的不同...
并不是JAVA的BUG..
在内存中...
j=j++ 先取局部变量j的值 ,压入操作数栈,而后对局部变量进行修改(加1),最后进行赋值操作,对操作数栈出栈,并将值赋给局部变量j.
在JAVA中
1,j=j++,其实就是j=(j=j+1)2,0=(j=j+1)即j=j+1=0. 这两个式子都不成立吧!!
按照语法 j=j++ 等同于 j = j; j=j+1;啊
vc++6.0中i结果为1
dev-c++中i结果为0
vc++6.0不是完全符合c的标准
=的优先级比var++要低,所以先执行i++,返回结果。再赋值