Java - 当声明全局变量并用值初始化时,对象创建时会发生什么?

标签 java memory-management

当全局变量被声明并用值初始化时,那么在创建类的对象时,全局变量是否会再次被初始化并获得新的内存?

class A{

int a = 10;

}

这将被存储在内存地址 a 中值(value)10 。但是当我创建A类的对象时,a会再次初始化吗?

class A{

int a = 10;

public static void main(String args[]){

A a = new A();

}

最佳答案

你所说的并不完全是内存分配的工作原理。

class A{

int a = 10;

}

在上面的示例中,您创建了一个类。类中的成员仅在创建其对象后才创建并分配其值,除非将成员声明为静态。因此,在您发布的第二个示例中,在构造 A 类的对象“a”之后,变量“a”被赋予值 10。如果您仍然不明白,请运行以下代码:

class A{
int a = 10;
public static void main(String args[]){
A a = new A();
A b = new A();
b.a += 10;
System.out.println(a.a);
System.out.println(b.a);
}
}

如果变量a在创建对象之前被赋值,那么当对象b修改它时,打印的变量就会改变。但如果你运行这个,输出将是:

10
20

这意味着变量仅在对象创建后才分配。我希望这能消除您的疑虑。另外还有一个提示,静态变量无法修改。

关于Java - 当声明全局变量并用值初始化时,对象创建时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58345111/

相关文章:

java - 架构组件 : How does the ViewModelProvider know which constructor to call?

c - 使用共享内存运行程序时出现问题;有时会出现段错误; shmmax和shmall有关系吗?

c++ - 删除 vector 指针

c - 由于重新分配而导致执行错误

java - 我如何使用 org.json API 读取这个 json 字符串

java - 如何获取当前时间 09 :04:15 instead of 9:4:15 when using Date?

java - AndroidPDFViewer - 无法在我的应用程序中打开 pdf 文档

java - Hibernate Generated Value 策略

node.js - 常驻内存大于 --max-old-space-size 阈值?

java - 类加载器和类对象是否在年轻代中启动?