3 回答
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
这意味着变量仅在对象创建后才分配。我希望这能消除您的疑虑。还有另一个提示,静态变量不能修改。
TA贡献1865条经验 获得超7个赞
当全局变量被声明并用值初始化时......
您所显示的不是全局变量。Java 中不存在真正的全局变量。a
是 的实例字段A
。
这将被存储在内存地址 a 中,值为 10。
a
不是内存地址,它只是字段的名称。您很少需要处理低级内容,例如 Java 中的内存地址。
但是当我创建A类的对象时,a会再次初始化吗?
在创建实例之前,不会为该字段分配内存a
,除非用于存储已编译的类文件本身。一旦创建了一个实例,A
内存中就会有一个位置存储与该实例的字段10
相对应的值。a
请注意,如果您创建 的第二个实例A
,则将分配另一块内存来保存a
该实例的 。
TA贡献1831条经验 获得超10个赞
Java中没有全局变量。有类变量和对象变量。类变量由关键字定义static
。
在您的代码中,该a
变量是一个对象变量,每次创建该类的新对象时都会创建(并初始化)该变量,在本例中是通过调用new A()
.
如果您创建了 A 类的另一个对象,a
则会为其创建(并初始化)另一个对象变量,这与第一个对象变量不同。
添加回答
举报