为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇湘沐 2023-10-13 15:13:40
当全局变量被声明并用值初始化时,在创建类的对象时,全局变量是否再次被初始化并获得新的内存?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();}
查看完整描述

3 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

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


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

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


查看完整回答
反对 回复 2023-10-13
?
莫回无

TA贡献1865条经验 获得超7个赞

当全局变量被声明并用值初始化时......

您所显示的不是全局变量。Java 中不存在真正的全局变量。a是 的实例字段A

这将被存储在内存地址 a 中,值为 10。

a不是内存地址,它只是字段的名称。您很少需要处理低级内容,例如 Java 中的内存地址。

但是当我创建A类的对象时,a会再次初始化吗?

在创建实例之前,不会为该字段分配内存a,除非用于存储已编译的类文件本身。一旦创建了一个实例,A内存中就会有一个位置存储与该实例的字段10相对应的值。a

请注意,如果您创建 的第二个实例A,则将分配另一块内存来保存a该实例的 。


查看完整回答
反对 回复 2023-10-13
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

Java中没有全局变量。有类变量和对象变量。类变量由关键字定义static

在您的代码中,该a变量是一个对象变量,每次创建该类的新对象时都会创建(并初始化)该变量,在本例中是通过调用new A().

如果您创建了 A 类的另一个对象,a则会为其创建(并初始化)另一个对象变量,这与第一个对象变量不同。


查看完整回答
反对 回复 2023-10-13
  • 3 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信