今天看到网易Java面试题一道题;
package algorithms.com.guan.javajicu;
public class Inc {
public static void main(String[] args) {
Inc inc = new Inc();
int i = 0;
inc.fermin(i);
i= i ++;
System.out.println(i);
}
void fermin(int i){
i++;
}
}
答案是0;
inc.fermin(i)调用的方法没有改变i的值我知道,基本数据类型是值传递,因此这里不改变i的值;
但是却不理解为什么i=i++为什么没有变化,后来查阅一下资料有所了解。
原来jvm里面有两个存储区,一个是暂存区(是一个堆栈,以下称为堆栈),另一个是变量区。jvm会这样运行这条语句, JVM把count值(其值是0)拷贝到临时变量区。 步骤2 count值加1,这时候count的值是1。 步骤3 返回临时变量区的值,注意这个值是0,没修改过。 步骤4 返回值赋值给count,此时count值被重置成0。 c/c++中没有另外设置一个临时变量或是临时空间来保存i,所有操作都是在一个内存空间中完成的,所以在c/c++中是1。