Til*_*Raj 0 java memory memory-management class object
public class Concept {
int num;
public static void main(String args[])
{
Concept obj1=new Concept();
Concept obj2=obj1;
obj1.num=100;
obj2.num=200;
System.out.println(obj1.num);
System.out.println(obj2.num);
//obj1.num=null;
obj2.num=500;
System.out.println(obj1.num);
System.out.println(obj2.num);
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,这是一个简单的java程序.
输出是
200
200
500
500
Run Code Online (Sandbox Code Playgroud)
内存分配如何在这里工作?如何将null设置为Obj1.num = null?
obj2
具有相同的引用obj1
,因此修改其中任何一个的状态将反映在两个变量中,因为它们指向相同的引用.
这是一张用于解释对象引用行为的图片(在本例中使用Person
类进行了解释):
资料来源:https://stackoverflow.com/a/7034719/1065197
请注意,您无法使int
Java中的任何原始值obj1.num = null
无效,因此无效.但是,如果您声明num
为Integer
可以设置其值,null
因为它Integer
是基元的包装类int
.
你一次问两个问题.
Java使用引用,因此通过设置obj2 = obj1
,不会复制值,两个引用都引用相同的对象.设置num
through 的值与设置值obj1
相同obj2
.
在内存中它看起来像:
+-----------------+
obj2 -> | Concept | <- obj1
+-----+-----+-----+
| num | int | 200 |
+-----+-----+-----+
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用以下代码,则将构造两个对象:
Concept obj1 = new Concept();
obj1.num = 200;
Concept obj2 = new Concept();
obj2.num = 300;
Run Code Online (Sandbox Code Playgroud)
然后内存看起来像:
+-----------------+ +-----------------+
obj1 -> | Concept | obj2 -> | Concept |
+-----+-----+-----+ +-----+-----+-----+
| num | int | 200 | | num | int | 300 |
+-----+-----+-----+ +-----+-----+-----+
Run Code Online (Sandbox Code Playgroud)
从而改变num
从obj1
将设定为比从所述存储器的不同部分obj2
.
你不能分配null
给int
:它是一种原始类型.如果你想要一个带null
值的整数,试试吧Integer
.
归档时间: |
|
查看次数: |
105 次 |
最近记录: |