先说完【警告】,再公布【转】的内容。
初学者为什么学的慢,学JAVA,一般从SE到EE,到最后做出项目,要学什么,要用什么,我该学什么,学了怎么用,一般你是不知道的,道听途说,一知半解居多。学的很累,进度很慢,没效果,是不是?
主题来了,我们常说,钻牛角尖问题。除了for(int i=0;i<100;i++)用的循环
然后就想int i=0;赋值i=i++;不考虑i=i+1;和i+=1;三个赋值语句常用后面两种的。
就死在这第一个赋值语句上了。
*******************************************
类似这样的还有二进制移位,比如2*2对于计算机最快的速度不是乘法,而是移位操作得出结果。2的二进制是10,2*2的结果是4,4的2进制是100,那么直接把最开始的10移位变100岂不是比计算更快?
类似这样的问题还有很多。
*******************************************
尤其是自学的人,单独自学的人,绕开这些问题。因为这些问题很多用不到。等你会做项目了,能工作了,再回来了解不迟。别开始就扎在这上面,就完蛋了。
好了不多说了,明白我的意思就行,我可以说今天这个i=i++,很多大神可能知道,但是讲不清楚的也有很多,很正常。身边还有大神牛到最后连变量和属性都说不清楚。因为用的太多了,用烂了,就说不清楚了。
*******************************************
【转】
public static void main(String[] args){
int i = 0;
i = i ++;
System.out.println("i = " + i);
}
我想问的是为什么输出的结果是
i = 0
就算是先执行“i = i”,可是i 的自加不还是要执行的吗?
bysea51 回复于:2004-10-25 14:14:32
在这里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。
[精彩] i = i++;http://www.chinaunix.net/old_jh/26/429688.html
*******************************************
大家一起进步,我今天也回顾了C的指针,栈,堆,还有JAVA的暂存区,变量区。
初学者为什么学的慢,学JAVA,一般从SE到EE,到最后做出项目,要学什么,要用什么,我该学什么,学了怎么用,一般你是不知道的,道听途说,一知半解居多。学的很累,进度很慢,没效果,是不是?

主题来了,我们常说,钻牛角尖问题。除了for(int i=0;i<100;i++)用的循环
然后就想int i=0;赋值i=i++;不考虑i=i+1;和i+=1;三个赋值语句常用后面两种的。
就死在这第一个赋值语句上了。

*******************************************
类似这样的还有二进制移位,比如2*2对于计算机最快的速度不是乘法,而是移位操作得出结果。2的二进制是10,2*2的结果是4,4的2进制是100,那么直接把最开始的10移位变100岂不是比计算更快?
类似这样的问题还有很多。

*******************************************
尤其是自学的人,单独自学的人,绕开这些问题。因为这些问题很多用不到。等你会做项目了,能工作了,再回来了解不迟。别开始就扎在这上面,就完蛋了。
好了不多说了,明白我的意思就行,我可以说今天这个i=i++,很多大神可能知道,但是讲不清楚的也有很多,很正常。身边还有大神牛到最后连变量和属性都说不清楚。因为用的太多了,用烂了,就说不清楚了。

*******************************************
【转】
public static void main(String[] args){
int i = 0;
i = i ++;
System.out.println("i = " + i);
}
我想问的是为什么输出的结果是
i = 0
就算是先执行“i = i”,可是i 的自加不还是要执行的吗?
bysea51 回复于:2004-10-25 14:14:32
在这里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。
[精彩] i = i++;http://www.chinaunix.net/old_jh/26/429688.html
*******************************************
大家一起进步,我今天也回顾了C的指针,栈,堆,还有JAVA的暂存区,变量区。