关于Java内存模型的问题
文章目录
- 前言
- 一、Java内存模型
- 二、其中一些指向问题
- 1.内存指向问题
- 为什么?
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、Java内存模型
Java内存模型可以抽象为如下
第一种情况:
代码如下(示例):
class A{
}class Entrance{public static void mian(String[] args){A a=new A();A b=new A();A c=new A();}
}
每当创建一个新的对象时,系统会为对象(栈内存)分配一个堆内存中的地址(001)
第二种情况:
class A{
}class Entrance{public static void mian(String[] args){A a=new A();A b=a;A c=b;a =new A();}
}
对象实例之间的互相赋值如下
二、其中一些指向问题
1.内存指向问题
代码如下(示例):
class A{int age;B b; A(int age){this.age=age;}A(){}void testA(B b1){b=new B();b.testB1();}
}
class B{A a=new A();int age;void testB1(){System.out.println(a.age);}void testB2(){}
}
class Entrance{public static void main(String[] args){B b1=new B();B b2=b1;b1=null;b2.testB1();}}
编译执行结果:
为什么?
b1置空,不指向任何堆内存,但是b2还是停留在原来的对象上,b1是new的,所以默认age赋值为0。
总结
对象之间互相的赋值在赋值之后会互相影响,但是置空后不影响之前的赋值结果