Tae*_*wan 8 java memory variables pointers reference
Java的引用变量是如何存储的?这是否与C指针类似?
我的意思是引用变量是这段代码中的myDog
Dog myDog = new Dog();
Run Code Online (Sandbox Code Playgroud)
我理解了C指针,它存储在堆中的全局变量,并且它存储在堆栈中的局部变量.我想知道java工作方式相同.
ζ--*_*ζ-- 22
您需要了解一些较低级别的Java内存组织.在堆栈上,存储指向堆的基元(int,double,boolean等)和对象引用.
在任何对象内部都是如此.它或者直接包含对其他对象或基元的引用.对象始终在任何上下文中引用,并且这些引用按值传递.
所以我们可能有:
[ STACK ] [ HEAP ]
int a: 10; -> MyWrapperObject@21f03b70====||
double b: 10.4; | || int someField: 11 ||
MyWrapperObject@21f03b70 ------| || String@10112222 ----------
...... ||==========================|| |
|
|
String@10112222============||<----
|| ... ||
|| ... ||
}}=========================||
Run Code Online (Sandbox Code Playgroud)
请注意,在某些情况下(如通过JVM内部)对象可能会存储在非堆内存中.
Java 的工作方式相同。请注意,Java 中没有变量具有对象作为值;所有对象变量(和字段)都是对对象的引用。对象本身由 Java 虚拟机维护在某个地方(通常在堆上)。Java 具有自动垃圾收集功能,因此(与 C 不同)您无需担心释放对象。一旦对它的所有实时引用超出范围,它最终将被垃圾收集器清除。
例如:
Dog myDog = new Dog();
someMethod(myDog);
Run Code Online (Sandbox Code Playgroud)
传递someMethod给 所引用的狗对象的引用myDog。对象内部可能发生的更改将在方法返回后someMethod看到。myDog
| 归档时间: |
|
| 查看次数: |
9352 次 |
| 最近记录: |