java中i++和局部变量的问题
之前一直以为i++是先做运算,再自加,但是碰到一个很简单的问题却打破我原来的认识,以前学的时候,老师也是这么说的,所以一直有一种根深蒂固的思想(好多老师不知道误导了多少人)。还好我遇到了这种问题,才能查出错误。
下面是这个问题:
package com.company;
public class localVar {
public void autoIncrement(int i){
i++;
}
public static void main(String args[]){
int i = 0;
localVar temp = new localVar();
/*
这一行的代码是这样:i++底层实现(int temp = i;i=i+1;return temp;)
实际执行过程1.i = i+1;2.i = temp;(原始值)
虽然自加了,但是是在运算前自加,所以没用;
*/
i=i++;
System.out.println("i的值:"+i);
/*
这一行的代码是这样:只是把外面的参数i传递进去,
然后用函数的内部空间赋值一个新变量,
没有将改变后的值传递出来。
实际执行过程:int temp = i;
temp++;
想要传递出来就要加return i;
*/
temp.autoIncrement(i);
System.out.println("i的值:"+i);
}
}
如上所示:第一个输出的i值其实是0,如果你以前一直是我上面所说的错误的认识,那么会认为输出的是1。
第二个输出其实对于jvm认识不是很深的话就会出错,认为输出也是1,其实是0。所以学好代码还是要学习底层的原理,不能拿来就用,否则会有很多错误。
总结:好好看书,少听别人讲。