在java里面int sum=0;for(int i=0;i<=100;i++){sum=sum++;}System.out.println(sum);为什么结果为0;拜托

举个例子就更好了

你这里是sum++和++sum弄不清楚。
给个例子:
int i=0;
System.out.println(i++);结果是0

int i=0;System.out.println(++i);结果是1
对应到你的题目中:
int sum=0;
sum=sum++;
因为每次sum++都是0,所以你的sum也就一直是0,所以不管循环多少次你的sum都不会递增了
要使它递增,改为sum=++sum
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-27
sum++是一个表达式
其结果是sum的值,然后sum的值进行+1操作
给你解释一下第一次循环
首先sum++的是还是0 但是此时 sum的值是1
然后你又将sum的值重新赋值成 sum++的值0
所以sum++之后sum的值是1,又经过赋值之后,又回归成0了
所以sum的值是0
再次循环同样本回答被提问者采纳
第2个回答  2011-04-27
---------------------

class Test {
public static void main(String avgs[]){
int i = 0;
i = i++;
System.out.println("i = "+ i);

}
}

----------------------

2. 编译以上的Test.java,生成Test.class后,使用javap反汇编。生成字节码文件。

javap -c Test > Test.bc

Test.bc的内容如下:

--------------------

Compiled from "Test.java"
class Test extends java.lang.Object{
Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return

public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iload_1
3: iinc 1, 1
6: istore_1
7: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
10: new #3; //class java/lang/StringBuilder
13: dup
14: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
17: ldc #5; //String i =
19: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
22: iload_1
23: invokevirtual #7; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
26: invokevirtual #8; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
29: invokevirtual #9; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
32: return

}

--------------------

3. Java的JVM剖析:

在jvm里面有两个存储区,一个是暂存区(是一个堆栈,以下称为堆栈),另一个是变量区。
语句istore_1是将堆栈中的值弹出存入相应的变量区(赋值);语句iload_1是将变量区中的值暂存如堆栈中。
因为i = i++;是先将i的值(0)存入堆栈,然后对变量区中的i自加1,这时i的值的确是1,但是随后的istore_1又将堆栈的值(0)弹出赋给变量区的i,所以最后i = 0。

如果是i = ++i的情况,是先对变量区中的i自加1,然后再将变量区中i的值(1)存入堆栈,虽然最后执行了istore_1,但也只是将堆栈中的值(1)弹出赋给变量区的i,所以i = ++i;的结果是i = 1。

4. iload_1、istore_1的含义见JVM Spec。
第3个回答  2011-04-27
蛋疼啊!sum=0, sum++相当于0++,别说加100次,就是加1000次的结果也是0啊!
第4个回答  2011-05-09
//应该是没什么区别,有例为证
long sum = 0;
long start = System.currentTimeMillis();
for (int i = 1000000000; i > 0; i--) {
sum++;
}

long end = System.currentTimeMillis();
System.out.println(end-start+" "+sum);
start = System.currentTimeMillis();
sum = 0;
for (int i = 0; i < 1000000000; i++) {
sum++;
}
end = System.currentTimeMillis();
System.out.println(end-start+" "+sum);