/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Objektreferencer og null
Fra : Janus


Dato : 05-12-05 21:58

Endnu et lille spørgsmål:


Scenariet er som følger:

public class A {
private Foo foo;
private B b;

public A() {
foo = null;
b = new B(foo);
}

public void setFoo() {
foo = new Foo();
}
}


public class B {
private Foo foo;

public B(Foo foo) {
this.foo = foo;
}

public String giveMeFooInfo() {
return (foo == null ? "Foo is null" : "Foo exists!");
}
}

Hvis jeg instantierer A, kalder giveMeFooInfo() på b, kalder setFoo() og
kalder giveMeFooInfo() igen, burde jeg så ikke få:

Foo is null
Foo exists!

istedet for

Foo is null
Foo is null


Det, der undrer mig, eller som mit spørgsmål egentlig er, er at når
parameteren til instansen af B er null, bliver den ikke tolket som en
objektreference? Jeg lader jo efterfølgende foo pege på et "ægte"
objekt, men dette holder åbenbart ikke vand?

Med venlig hilsen

Janus



--

Kids, try this at home: http://www.legendsrpg.net/index.php?refid=799

 
 
Johnnie Hougaard Nie~ (05-12-2005)
Kommentar
Fra : Johnnie Hougaard Nie~


Dato : 05-12-05 23:32

Janus wrote:
> Det, der undrer mig, eller som mit spørgsmål egentlig er, er at når
> parameteren til instansen af B er null, bliver den ikke tolket som en
> objektreference? Jeg lader jo efterfølgende foo pege på et "ægte"
> objekt, men dette holder åbenbart ikke vand?

Sagen er at når du instantierer B, overfører du objektreferencen som
sådan, ikke en reference til referencen. Det vil sige at B ikke "ved"
noget om hvad A gør med _sin_ objektreference efter at B fik sin kopi.

Janus (05-12-2005)
Kommentar
Fra : Janus


Dato : 05-12-05 23:56

Johnnie Hougaard Nielsen wrote:
> Janus wrote:
>
>> Det, der undrer mig, eller som mit spørgsmål egentlig er, er at når
>> parameteren til instansen af B er null, bliver den ikke tolket som en
>> objektreference? Jeg lader jo efterfølgende foo pege på et "ægte"
>> objekt, men dette holder åbenbart ikke vand?
>
>
> Sagen er at når du instantierer B, overfører du objektreferencen som
> sådan, ikke en reference til referencen. Det vil sige at B ikke "ved"
> noget om hvad A gør med _sin_ objektreference efter at B fik sin kopi.



Måske er det bare mig, der har fået et eller andet galt i halsen? Min
opfattelse af, hvad der sker, når jeg gør som i #1 post:


reference
class A -------------> Object X

i A sendes så referencen til en instans af B, så det ser således ud:


reference
class A -------------> Object X
^
reference |
class B ------------------|


Således, at hvis jeg satte en property på X, ville dette afspejles i
både A og B. Jeg har leget lidt med det med en Vector i stedet for Foo,
og det ser ud til at holde.

MEN lader jeg nu A's reference pege på et nyt objekt (Q), har dette ikke
indflydelse på B's eksisterende reference:


reference
class A -------------> Object Q

reference
class B -------------> Object X


Very interesting ... ja, det er common Java knowledge, men selvom jeg
har arbejdet med sproget i et par år, mindes jeg ikke tidligere at være
stødt på dette "problem". Nå, jeg må vist bare lave en b.setFoo(Q) :)

Hej fra Janus


--

Kids, try this at home: http://www.legendsrpg.net/index.php?refid=799

Arne Vajhøj (21-12-2005)
Kommentar
Fra : Arne Vajhøj


Dato : 21-12-05 19:32

Janus wrote:
> Endnu et lille spørgsmål:
>
> Scenariet er som følger:
>
> public class A {
> private Foo foo;
> private B b;
>
> public A() {
> foo = null;
> b = new B(foo);
> }
>
> public void setFoo() {
> foo = new Foo();
> }
> }
>
> public class B {
> private Foo foo;
>
> public B(Foo foo) {
> this.foo = foo;
> }
>
> public String giveMeFooInfo() {
> return (foo == null ? "Foo is null" : "Foo exists!");
> }
> }
>
> Hvis jeg instantierer A, kalder giveMeFooInfo() på b, kalder setFoo() og
> kalder giveMeFooInfo() igen, burde jeg så ikke få:
>
> Foo is null
> Foo exists!
>
> istedet for
>
> Foo is null
> Foo is null
>
>
> Det, der undrer mig, eller som mit spørgsmål egentlig er, er at når
> parameteren til instansen af B er null, bliver den ikke tolket som en
> objektreference? Jeg lader jo efterfølgende foo pege på et "ægte"
> objekt, men dette holder åbenbart ikke vand?

Pointen er at du ikke kalder med et objekt by reference men
med en reference til et objekt by value.

Det giver:

A foo = null
B foo = A foo
A foo = noget

Og så er B foo stadig null men A foo peger på noget.

Arne

Janus (22-12-2005)
Kommentar
Fra : Janus


Dato : 22-12-05 20:34

Arne Vajhøj wrote:

>
> Pointen er at du ikke kalder med et objekt by reference men
> med en reference til et objekt by value.
>
> Det giver:
>
> A foo = null
> B foo = A foo
> A foo = noget
>
> Og så er B foo stadig null men A foo peger på noget.
>
> Arne

Hej Arne, tak for svaret. Men det er vist det svar, der allerede er
blevet givet af Johnnie Hougaard Nielsen, er det ikke? I hvert fald var
hans forklaring ganske fin og tydelig, og min appikation kører
upåklageligt (på det punkt, i hvert fald *s*)

Vh Janus

Arne Vajhøj (22-12-2005)
Kommentar
Fra : Arne Vajhøj


Dato : 22-12-05 21:15

Janus wrote:
> Hej Arne, tak for svaret. Men det er vist det svar, der allerede er
> blevet givet af Johnnie Hougaard Nielsen, er det ikke? I hvert fald var
> hans forklaring ganske fin og tydelig,

Det er samme forklaring.

Som en del andre lider jeg under den opfattelse
at jeg tror at min måde at forklare det på er
den bedste ...

Arne

Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407944
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste