【主题】 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了。
转贴Java基本数据类型的运算
最新推荐文章于 2022-07-23 16:19:40 发布