++ 比 += 优先级高 i += i ++; 应该等价于 i += (i ++); 但是我又有奇怪的发现: 尝试以下: public class Test{ public static void main(String[] args){ int i = 0; i += (i ++); System.out.println("i :" + i); System.out.println("i ++ :" + i++); // !!! } }结果: i :0 i ++ :0
public class Test{ public static void main(String[] args){ int i = 0; i+=i++; //i=i++; /* 如果这儿是 j+=i++ , 那么在该步骤完成后i已经是1了,而j为0。但在本步骤中该算式右边的结果仍旧是0,你把0赋值给i,最后i当然就等于0了。 System.out.println(i); //0?!! } }
这是i++ 与++i的区别。 public class Test{ public static void main(String[] args){ int i,j = 0; j += i ++; System.out.println("j+=:" + j); System.out.println("i :" + i); } }这是的j=0 i=1
public class Test{ public static void main(String[] args){ int i = 0; i+=i++; //i=i++; } i+=i++ <=> i=i+i++; i++与++i的区别是 i++先使用i的值,再使i加1,而++i,是先给i加1,在使用i值。i=i+i++ <=>i=0+0(此时由于i++运算,i=1,但随后i又被重新付值 i=0) 如果这儿是 j+=i++ , 那么在该步骤完成后i已经是1了,而j为0.
你System.out.println(i)实际上是显示了0(没有运算前i的状态)。
你要使他显示1只要吧i+=i++改成i+=++i就行了。
这是计算机的编程的基本知识阿。你要好好补补课了。
:)祝你进步
i += i ++; 应该等价于 i += (i ++);
但是我又有奇怪的发现:
尝试以下:
public class Test{
public static void main(String[] args){
int i = 0;
i += (i ++);
System.out.println("i :" + i);
System.out.println("i ++ :" + i++); // !!!
}
}结果:
i :0
i ++ :0
public static void main(String[] args){
int i = 0;
i+=i++; //i=i++; /* 如果这儿是 j+=i++ , 那么在该步骤完成后i已经是1了,而j为0。但在本步骤中该算式右边的结果仍旧是0,你把0赋值给i,最后i当然就等于0了。 System.out.println(i); //0?!!
}
}
public class Test{
public static void main(String[] args){
int i,j = 0;
j += i ++;
System.out.println("j+=:" + j);
System.out.println("i :" + i);
}
}这是的j=0 i=1
public static void main(String[] args){
int i = 0;
i+=i++; //i=i++; }
i+=i++ <=> i=i+i++;
i++与++i的区别是 i++先使用i的值,再使i加1,而++i,是先给i加1,在使用i值。i=i+i++ <=>i=0+0(此时由于i++运算,i=1,但随后i又被重新付值 i=0)
如果这儿是 j+=i++ , 那么在该步骤完成后i已经是1了,而j为0.
public class Test extends java.lang.Object {
public Test();
public static void main(java.lang.String[]);
}Method Test()
0 aload_0
1 invokespecial #1 <Method java.lang.Object()>
4 returnMethod void main(java.lang.String[])
0 iconst_0
1 istore_1
2 iload_1
3 iload_1
4 iinc 1 1
7 iadd
8 istore_1
9 getstatic #2 <Field java.io.PrintStream out>
12 iload_1
13 invokevirtual #3 <Method void println(int)>
16 return
for(int i=0;i<100;i++){
if(i==0){
System.out.println("i++是先执行i原来的值后才加1");
}
}
就是说,在for语句里面,我们虽然在前面的“int i=0;i<100;i++”运用了i++,但是,第一个i仍然是i的初始值0,在随后的循环中,i才不断的加1; 这样,我相信大家就很好的理解为什么上面的例子会出现问题:
i+=i++; 因为没有循环,里面的i++根本没有机会加1。 大家不要被欺骗了! :)
//has valid value
} else {
//null or equals to space("")
}
public static void main(String[] args){
int i,j = 0;
j += i ++;
System.out.println("j+=:" + j);
System.out.println("i :" + i);
}
}
这里的结果为j=0 i=1 ,i在执行完j+=i++后,自动加1了。
String myString;//change myString's valueif (myString != null && !(myString.trim()).equlas("")) {
//^刚才漏了这个,呵呵。 //has valid value
} else {
//null or equals to space("")
}