public class Test {
public static void main(String[] args) {
int f=0;
for (int i = 0;i<10;i++) {
f = f++;
}
System.out.println(f);
}
}
public static void main(String[] args) {
int f=0;
for (int i = 0;i<10;i++) {
f = f++;
}
System.out.println(f);
}
}
f++;
}
int f=1;
for (int i = 0;i <10;i++) {
f = f++;
}
System.out.println(f);
}
}
输出也是1哦
但是JAVA里并不是你所想像的顺序:运算,运算后用i+1代替i
他实际的顺序是这样的:开辟一个内存地址,将i的值放进去,原来i的地址的值+1,用新开辟的地址里i的值进行运算,运算后释放掉开辟的地址.
如果你用j=f++,n=f++就都没有问题,但唯独你用f=f++时才会出现这种问题
class IncDec{
public static void main ( String [ ] args ) {
int a=0,d=0;
d = a++;
System.out.println ( "a = " + a );
System.out.println ( "d = " + d );
}
}
我猜想:运行时内存中会有两处f也就是一个左f和一个右f,右f是计算过程中临时存在的,计算结束即丢弃。
而左f会一直存在直至生命结束。
也就是说最终取计算结果而不是取计算过程。
public class test4 { public static void main(String[] args) {
int f=1;
f = f++;
System.out.println(f);
}
}
没有循环的话,我想没人会选错答案。
猜想猜想 等达人给解释
龙欣
等 级:
发表于:2007-11-08 16:16:227楼 得分:0
我晕.没说清楚.哪位高手说个清楚啊.还有一题
class IncDec{
public static void main ( String [ ] args ) {
int a=0,d=0;
d = a++;
System.out.println ( "a = " + a );
System.out.println ( "d = " + d );
}
}
--------------------------------
这个怎么了?没问题啊!!!
int f=1;
f = f++;
System.out.println(f);
}
}
f=1,二个F就会这样.要是换成别的变量就不会.不知道昨回事,
霸全勋章
等 级:
发表于:2007-11-08 16:03:006楼 得分:0
这是JAVA机制的问题 i++的意思就是i自加1,并且是在运算后自加(区别于++i)
但是JAVA里并不是你所想像的顺序:运算,运算后用i+1代替i
他实际的顺序是这样的:开辟一个内存地址,将i的值放进去,原来i的地址的值+1,用新开辟的地址里i的值进行运算,运算后释放掉开辟的地址.
如果你用j=f++,n=f++就都没有问题,但唯独你用f=f++时才会出现这种问题
-------------------------------
在6楼,LOOK~~int j,f=0;
j=f++;
我们假设f的地址为0001,j的地址为1111
首先,开辟新内存地址0002,存放0(f的值)
然后f++(用的是0001地址),0001的值为1,0002的值为0
然后把0002的值给1111,释放0002,最后得到,f=1,j=0现在换成f=f++
同样,假设f的地址为0001
首先,开辟新内存地址0002,存放0
然后f++(用0001地址),0001的值为1,0002的值为0
然后这里,关键的部分,把0002的值给0001,然后释放0002,最后得到f=0
f=f++;等价于:f=(f++);(因为=的优先级低)
f++这个表达式的值是f原来没加之前的值,把这个值赋给f,所以f没有变。
不知道这么说对不对,能不能说明白