当你做一个引用=另一个引用,并且两个值都为空?

Moh*_*aie 0 java null

public static void main(String[] args) {
        ArrayList a=null, b=null;
        a=b;

        a=new ArrayList();
        System.out.println(a+""+b);
    }
Run Code Online (Sandbox Code Playgroud)

世界上为什么b打印为null?

我认为java引用的引用是相同的,然后你改变的其中一个反映了另一个.但不是在这种情况下!

Jon*_*eet 6

这一行:

a = b;
Run Code Online (Sandbox Code Playgroud)

将值设置为a当前值b.这是所有它.当前值为bnull,因此它等效于:

a = null;
Run Code Online (Sandbox Code Playgroud)

不是两个变量关联.它只是将一个值复制到另一个.

改变a之后的值根本不会改变b.这两个变量是完全分开的.请注意,这与原始类型完全相同:

int a = 10;
int b = a;
a = 5;
System.out.println(b); // Prints 10, not 5
Run Code Online (Sandbox Code Playgroud)

即使你有:

ArrayList<String> a = new ArrayList<String>();
ArragList<String> b = a;
a.add("Hello");
System.out.println(b.get(0)); // Prints "Hello"
Run Code Online (Sandbox Code Playgroud)

仍然没有真正显示变量a和变量之间的关系b.它们具有相同的值,因此它们引用相同的对象(ArrayList自身) - 可以通过任一变量观察对该对象的更改.但是,更改每个变量的以引用不同的列表(或null)不会影响其他变量或对象本身.

可能让您感到困惑的一件事是实际价值ab实际价值.Java中的变量(或任何其他表达式)的值永远不是对象 - 它始终是引用值或原始值.

因此,赋值运算符,或者将参数传递给方法,或类似的任何东西都不会复制对象 - 它只会复制表达式的值(引用或原始值).

一旦你理解了这一点,Java开始变得更有意义......