java中i++和局部变量的问题

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。所以学好代码还是要学习底层的原理,不能拿来就用,否则会有很多错误。

总结:好好看书,少听别人讲。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值