2016-04-13 16 views
0

Wenn ich 2 ObjekteWie binden Referenzen von zwei Objekten?

Foo foo; 
Foo bar = foo; 

sie beide Punkt anfänglich auf null.

Wenn die foo get initialisiert

foo = new Foo(); 

bar Verweise auf null, aber ich will es zu binden foo.

So bewirkt jede Änderung der Foo-Referenz , dass die Balkenreferenz gleich ist.

Gibt es eine Möglichkeit, um automatisch let bar auf die gleiche Adresse wie foo,

auch wenn sie verändert oder habe ich es manuell zu nennen?

foo = new Foo(); 
bar = foo; 
+1

"sie sollten beide auf foo aber bar immer noch auf null." - Nein, sollten sie nicht. – f1sh

+0

Ich möchte, dass sie auf die gleiche Referenz zeigen – jam

+1

@jam Sie können nicht. Sie sind beide Referenzen, also zeigen sie auf Objekte. Sie müssen sich darum kümmern. – Kayaman

Antwort

1

Sie können eine Problemumgehung verwenden, indem Sie etwas wie eine Zeigerklasse erstellen.

class Pointer <T> { 
    T target = null; 
    Pointer(T target){ 
    this.target = target; 
    } 
    static Pointer nullPointer(){ 
    return new Pointer(null); 
    } 
    public void setTarget(T target){ 
    this.target = target; 
    } 
    public T getTarget(){ 
    return target; 
    } 
} 

Sie können es wie folgt verwenden:

Pointer<Foo> foo = Pointer.nullPointer(); //target=null 
Pointer<Foo> bar = foo;   //bar now also "points" to null 
foo.setTarget(new Foo()); //now BOTH have the new object as the target 
1

Beide foo und bar sind nicht wirklich Objekte, sondern Verweise auf Objekte.

In Ihrer ersten Erklärung, Sie setzen sowohl auf undefinierte oder genauer foo ist undefined, und Sie setzen bar auf den gleichen Wert. Aber selbst wenn Sie foo initialisiert hätten, wäre die Antwort die gleiche. Wenn Sie den Wert foo auf ein neues Objekt (new Foo) setzen, verlassen Sie immer noch bar.

Also die Antwort ist, ja, Sie müssen es manuell tun.

0

Java ist Pass-by-Value, nicht Pass-by-Referenz. Die Referenz der Leiste sollte nicht die gleiche sein wie foo

Verwandte Themen