关于Java内存模型的问题
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、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。
总结
对象之间互相的赋值在赋值之后会互相影响,但是置空后不影响之前的赋值结果