public class Test01 {
public static void main(String[] args) {
int i = 0;
i = i++;
System.out.println(i);
}
}
/* 上面的程序执行结果?
* 如果你不了解虚拟机中那个临时变量的话,你会得到结果输出为:1
* 你错了。
* 结果输出为:0
* 原因: 虚拟机会创建一个临时变量temp(在之后都用这个temp)
* 1.temp = i = 0 (i=0 不会直接赋值给i,这是关键)
* 2.i++(所以i=1)
* 3.i = temp (最后才将temp赋值给i,而这时temp=0,所以最后输出为0)
* */
public class Test01 {
public static void main(String[] args) {
int i = 0;
int j = 0;
j = i++;
System.out.println(i);
System.out.println(j);
}
}
/*如果你不信,那么看这个例子。
* 你这输出结果为1,而不是0
* 1. temp = i = 0
* 2.i++ (i=1)
* 3.j = temp
*
* 所以 i=1
* j=0
* */
//来看一道面试题
public class Test01 {
public static void main(String[] args) {
System.out.println(getResult());
}
public static int getResult(){
int i = 0;
try{
return i++;
}finally{
return ++i;
}
}
}
/*我们知道,虚拟机在做运算的时候会创建一个临时变量
* 所以上面的例子:
* 1.执行try中return时
* _rtVal = i = 0, i++ (i=1)
* 这时发现还有finally子句,所以不会返回,要执行finally子句
* 2.执行finally中的return
* i++(i=2),_rtVal = i = 2
* return _rtVal=2
* 所以最后的返回结果为2
*
*
* */
/* 艹,这忽悠人吧?
* 那我在证明给你看?
* 下面的例子
*
* */
public class Test01 {
public static void main(String[] args) {
System.out.println(getResult());
}
public static int getResult(){
int i = 0;
try{
return i++;
}finally{
++i;
}
}
}
/*按照上面的步骤:
* 1.try中return
* _rtVal = 0, i++(i=1)
* 发现存在finally子句
* 2.finally中return
* i++(i=2) (这时我可没赋值给谁啊)
*
* 最后返回 _rtVal = 0
*
* */
java,自增运算++的深入研究
最新推荐文章于 2024-09-24 00:19:44 发布