考虑以下java代码:
class Person { String name; int age; } Person p1 = new Person(); Person p2 = new Person(); Person p3 = p2; p3 = p1;
这里总共创建了多少个对象和引用变量?是 name 即使它从未被示例化也会被创建?创建了2个对象,但是否有3个或5个引用变量?
name
rryofs0p1#
两个物体( p1 , p2 )三个变量( name , age , p3 ).
p1
p2
age
p3
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份推荐信。
yuvru6vn3#
2个对象被初始化, p1 以及 p2 . String name 将默认为 null 但是有一个引用,所以有两个引用,每个 Person . int 是一个原语,将默认为0,这里没有任何对象。 p3 是一个参考。最后一行是赋值,这里没有创建任何内容。答案是5。
String name
null
Person
int
3条答案
按热度按时间rryofs0p1#
两个物体(
p1
,p2
)三个变量(name
,age
,p3
).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份推荐信。
yuvru6vn3#
2个对象被初始化,
p1
以及p2
.String name
将默认为null
但是有一个引用,所以有两个引用,每个Person
.int
是一个原语,将默认为0,这里没有任何对象。p3
是一个参考。最后一行是赋值,这里没有创建任何内容。答案是5。