引用计数java

rhfm7lfc  于 2021-06-29  发布在  Java
关注(0)|答案(3)|浏览(317)

考虑以下java代码:

class Person {
    String name;
    int age;
}

Person p1 = new Person();
Person p2 = new Person();
Person p3 = p2;
p3 = p1;

这里总共创建了多少个对象和引用变量?是 name 即使它从未被示例化也会被创建?创建了2个对象,但是否有3个或5个引用变量?

rryofs0p

rryofs0p1#

两个物体( p1 , p2 )三个变量( name , age , p3 ).

qni6mghb

qni6mghb2#

例如,变量与基元类型一起保存在堆栈的内存中。对象保存在堆上,因此在创建时,例如:
person p1=堆栈p1上的new person()将被保存,并且在堆内存中为对象person分配内存。堆栈中的p1将在堆上分配的位置上有一个引用。在堆上,我们为诸如name之类的属性或类中的方法分配内存。当仅仅声明person的变量时,该变量只保存在堆栈上,因此不会在堆上分配新内存。
当我们做p3=p2时会发生什么?它将在堆栈上为我们的变量分配内存,并且只添加一个对p2保存位置的引用。
在最后的例子中,我们将分配3个点(对于p1、p2、p3),而在堆上我们将只分配2个点(对于p1和p2)。p3将首先参考p2,而p1将参考p1。我们将为p1、p2、p3对象从堆栈到堆总共创建3个引用,然后为字符串创建2个引用。我们总共有5份推荐信。

yuvru6vn

yuvru6vn3#

2个对象被初始化, p1 以及 p2 . String name 将默认为 null 但是有一个引用,所以有两个引用,每个 Person . int 是一个原语,将默认为0,这里没有任何对象。 p3 是一个参考。最后一行是赋值,这里没有创建任何内容。
答案是5。

相关问题