转贴Java基本数据类型的运算

【主题】  Java基本数据类型的运算

【关键字】java 基本数据类型

【问题描述】请看如果一段代码,如果不在eclipse里运行,请写出输出结果

                  public static void main(String[] args) {
                            int j = 0;
                            for(int i = 0; i < 100 ; i ++){
                               j = j ++;
                            }
                            System.out.println(j);

                   }

          很多人都会毫不犹豫说是100吧!告诉你,答案是0

【问题分析】

          这和JAVA的基本数据类型的运算有关,JAVA的基本数据类型都是值引用的,这跟对象不一样.同样,在你对基本数据类型进行操作后,他会生成在内存中划分出另外一块内存区.首先刚开始J = 0 , 在J = J++的时候, 等号前面的那个J已经不是J声名时的那块内存区了,JVM为他重

新为他分配一块新的内存区.比如说,int j = 0 时,j的内存地址为00xx01,值为0。那么经过第一循环的以后前面那个J内存地址为00xx02,值为0,而后面那个J(内存地址00xx01)则会进行++操作,此时他的值为1,不过他已经不能影响到前面J的值了,此时J的内存地址就已经是等号前面的那个J的内存地址了(00xx02),再进行第二循环的时候,j的内存地址是:00xx02,值是0,至于00xx01那块内存区域,因为已经没有人再使用,所以将会在下一次垃圾回收的时候被GC回收,此时他(内存地址为00xx02的J)变成后面的那个j,前面那个J 则又会重新分得一块新的内存区域00xx03,值仍然是0,而00xx02则又会被丢弃然后被GC回收,依此类推,直至最后打印时J仍然为0,但他的内存地址已经不是最开初的00xx01了,换句话说,他已经不是当初的那个J了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值