需要你的帮助理解java编程概念

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?

Lui*_*oza 7

obj2具有相同的引用obj1,因此修改其中任何一个的状态将反映在两个变量中,因为它们指向相同的引用.

这是一张用于解释对象引用行为的图片(在本例中使用Person类进行了解释):

在此输入图像描述

资料来源:https://stackoverflow.com/a/7034719/1065197

请注意,您无法使intJava中的任何原始值obj1.num = null无效,因此无效.但是,如果您声明numInteger可以设置其值,null因为它Integer是基元的包装类int.


Wil*_*sem 6

你一次问两个问题.


Java使用引用,因此通过设置obj2 = obj1,不会复制值,两个引用都引用相同的对象.设置numthrough 的值与设置值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)

从而改变numobj1将设定为比从所述存储器的不同部分obj2.


你不能分配nullint:它是一种原始类型.如果你想要一个带null值的整数,试试吧Integer.