java空引用复制

java空引用复制,java,reference,Java,Reference,原谅我,如果这是一个复制品,我似乎找不到任何解释我所看到的东西 以下节目: Object a = new Object(); Object b = a; System.out.println( "a: " + a ); System.out.println( "b: " + b ); a = null; System.out.println( "a: " + a ); System.out.println( "b: " + b );

原谅我,如果这是一个复制品,我似乎找不到任何解释我所看到的东西

以下节目:

    Object a = new Object();
    Object b = a;

    System.out.println( "a: " + a );
    System.out.println( "b: " + b );

    a = null;

    System.out.println( "a: " + a );
    System.out.println( "b: " + b );
结果如下:

a: java.lang.Object@3e25a5
b: java.lang.Object@3e25a5
a: null
b: java.lang.Object@3e25a5
但是为什么 提前谢谢

编辑#1


我想让我吃惊的是我正在打印地址。出于某种原因,在我的脑海中,我打印出了一些指示指针\引用的神奇值-实际上设置
b=a
并不能使它们保持相同,它只是创建一个指向堆上相同位置的新指针。我希望这对其他人有所帮助。

b
不是指
a
它指的是执行分配时所指的同一对象
a

我知道这不是同一种语言,但如果您熟悉C,它就像:

int someNum = 5;
int * a = &someNum; // a points to someNum
int * b = a; // b points to someNum too
a = NULL; // a doesn't point to anything (points to address 0), b still points to someNum

(我使用C,因为它可以更清晰地显示地址和引用)

a和b都是对您创建的对象实例的引用。这意味着两者都指向相同的内存区域。然后销毁其中一个引用。现在a指向null。但是对象和对它的第二个引用b都是活动的。这就是你看到的

让我们详细看看发生了什么:

//A is pointing to a new Object lets assume memory location for 1 for simplicity
Object a = new Object();
//B is now also pointing to memory location 1
    Object b = a;

//Both print the same they are both pointing to memory location 1
    System.out.println( "a: " + a );
    System.out.println( "b: " + b );

//a is now pointing to null, but there is no change to b which is still pointing to memory location 1
    a = null;

    System.out.println( "a: " + a );
    System.out.println( "b: " + b );
a引用一个新对象(
对象a=new Object()

b引用与a相同的对象(
对象b=a

a不引用任何内容(
a=null

b仍然引用该对象

Object a = new Object();
此行在堆上创建一个新对象,并将引用放入变量
a

Object b = a;
Java是按值传递的,因此此行将该引用的值传递/分配到变量
b

a = null;
这意味着变量
a
不应该再指向堆上的那个位置,而应该不指向任何地方。但这并不意味着
b
没有指向任何地方,因为我们通过值传递引用,所以
b
仍然指向堆上的那个对象


这里的关键观察是传递值。由于本质上我们将
a
的值复制成
b
,更改原件不会影响影印效果,因为它已经被复制了。

Java总是按值传递,就是这样。

null
不是前置的,它被视为对象,所以当调用
a=null
时,
a
将不引用任何内容,而
b
仍引用同一对象
新对象()

谢谢。迄今为止最清楚的解释是——我知道我遗漏了一些相当明显的东西;或者也许我需要一个复习,DOH!