Eclipse调试注意事项
断点的使用
debug的精髓就在断点,要将断点打在合适的位置上,不然即浪费时间又浪费精力。
一个经典的java题
试算出i,j,k
public static void main(String[] args) {
int i = 1 ;
i = i++;
int j = i++;
int k = i + ++i*i++;
System.out.println(i);
System.out.println(j);
System.out.println(k);
}
i++是选取值再自增
++i是先自增再取值
这个大家都再熟悉不过了吧
但是这道题我在第一次做的时候完全蒙了j,k,l没有一个对的上
之后通过debug快速找到问题所在并理解这道题
我们先把断点打在main方法前面,这样就可以完整查看代码运行流程
这是刚刚进入断点的样子
点击进入下一步
我们可以看到一个对象i被创建
继续下一步
问题来了,i=i++这段代码运行之后i还是1,i看起来并没有自增其实不然
这是因为 JVM 在处理 i = i++; 时 , 会建立一个临时变量来接收 i++ 的值 , 然后返回这个临时变量的值 , 返回的值再被等号左边的变量接收了 , 这样就是说 i 虽然自增了但是又被赋值了1 , 这样结果自然还是 1 了
当j=i++这断代码运行后 i变为2 而创建的j 被赋为1
在运行完 int k = i + ++i*i++; 这行代码之后 i的值变为4而k自然就等于2+3x3=11;