/ 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
Arrays til metoder
Fra : Andreas Andersen


Dato : 18-01-01 13:02

Hej

Hvordan kan det være at hvis man sender et array til en metode og ændrer i
arrayet i metoden så forbliver ændringerne der efter metodekaldet. Jeg
troede alle parametre til metoder var lokale og ændringer gik tabt når man
sluttede metoden uden at returnere noget.

På forhånd tak
Andreas



 
 
Jacob Bunk Nielsen (18-01-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 18-01-01 14:00

"Andreas Andersen" <aa@arweb.dk> writes:

> Hvordan kan det være at hvis man sender et array til en metode og ændrer i
> arrayet i metoden så forbliver ændringerne der efter metodekaldet. Jeg
> troede alle parametre til metoder var lokale og ændringer gik tabt når man
> sluttede metoden uden at returnere noget.

Det er fordi de ikke sender en kopi af arrayet med til metoden,
men blot en reference til arrayet. Sådan er det for alle ikke
simple typer i Java.

--
Jacob
Artificial intelligence is no match for natural stupidity.

Andreas Andersen (18-01-2001)
Kommentar
Fra : Andreas Andersen


Dato : 18-01-01 14:04

Hvordan kan det så være at nedenstående udskriver 2 - java.lang.Integer er
da ikke en simpel type.

public class Test {
public static void minMetode(Integer r) {
r = new Integer(5);
}

public static void main(String[] args) {
Integer r = new Integer(2);
minMetode(r);
System.out.println(r.intValue());
}
}

Andreas

Jacob Bunk Nielsen <spam@bunk.cc> skrev i en
nyhedsmeddelelse:m3y9w9ni9c.fsf@paven.bunk.cc...
> "Andreas Andersen" <aa@arweb.dk> writes:
>
> > Hvordan kan det være at hvis man sender et array til en metode og ændrer
i
> > arrayet i metoden så forbliver ændringerne der efter metodekaldet. Jeg
> > troede alle parametre til metoder var lokale og ændringer gik tabt når
man
> > sluttede metoden uden at returnere noget.
>
> Det er fordi de ikke sender en kopi af arrayet med til metoden,
> men blot en reference til arrayet. Sådan er det for alle ikke
> simple typer i Java.
>
> --
> Jacob
> Artificial intelligence is no match for natural stupidity.



Morten Nedertoft (18-01-2001)
Kommentar
Fra : Morten Nedertoft


Dato : 18-01-01 14:52

Andreas Andersen wrote:
>
> Hvordan kan det så være at nedenstående udskriver 2 - java.lang.Integer er
> da ikke en simpel type.
>
> public class Test {
> public static void minMetode(Integer r) {
> r = new Integer(5);

'r' er en kopi af 'r' du bruger i metodekaldet 'minMetode(r)'. Denne
kopi kan du selvfoelgelig aendre i 'minMetode'.

mvh. Morten N

Morten Primdahl (18-01-2001)
Kommentar
Fra : Morten Primdahl


Dato : 18-01-01 14:48

Andreas Andersen wrote:
>
> Hvordan kan det så være at nedenstående udskriver 2 - java.lang.Integer er
> da ikke en simpel type.

I Java er det referencen til objektet der bliver 'passed by value'.
Så ændinger i minMetode vil ikke berøre det objekt der refereres til
i din main.

Arrays er undtagelsen, de bliver passed by reference.

public class Test {

public static void minMetode(Integer[] r) {
r[0] = new Integer(5);
}

public static void main(String[] args) throws Exception {
   
   Integer[] r = new Integer[] {new Integer(2)};
minMetode(r);
System.out.println(r[0].intValue());
}
}

Søg evt. google: java pass by reference

Mvh Morten


>
> public class Test {
> public static void minMetode(Integer r) {
> r = new Integer(5);
> }
>
> public static void main(String[] args) {
> Integer r = new Integer(2);
> minMetode(r);
> System.out.println(r.intValue());
> }
> }
>
> Andreas
>
> Jacob Bunk Nielsen <spam@bunk.cc> skrev i en
> nyhedsmeddelelse:m3y9w9ni9c.fsf@paven.bunk.cc...
> > "Andreas Andersen" <aa@arweb.dk> writes:
> >
> > > Hvordan kan det være at hvis man sender et array til en metode og ændrer
> i
> > > arrayet i metoden så forbliver ændringerne der efter metodekaldet. Jeg
> > > troede alle parametre til metoder var lokale og ændringer gik tabt når
> man
> > > sluttede metoden uden at returnere noget.
> >
> > Det er fordi de ikke sender en kopi af arrayet med til metoden,
> > men blot en reference til arrayet. Sådan er det for alle ikke
> > simple typer i Java.
> >
> > --
> > Jacob
> > Artificial intelligence is no match for natural stupidity.

--
Morten Primdahl Caput A/S Tel +45 70 12 24 42
morten@caput.com Nygade 6 Fax +45 70 11 24 42
http://www.caput.com/ DK-1164 Kbh K

Jacob Bunk Nielsen (18-01-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 18-01-01 15:20

Morten Primdahl <morten@caput.com> writes:

> Arrays er undtagelsen, de bliver passed by reference.

Er det nu også det?
Det er vel kun indholdet det bliver passed by reference.

public class Test {

public static void minMetode(Integer[] r) {
   r = new Integer[] {new Integer(5)};
}

public static void main(String[] args) throws Exception {
   
   Integer[] r = new Integer[] {new Integer(2)};
minMetode(r);
System.out.println(r[0].intValue());
}
}

(ovenstående udskriver 2).

Men efterhånden tror jeg vi er ved at være enige om hvad
vi mener

--
Jacob
"There's an old story about the person who wished his computer were
as easy to use as his telephone. That wish has come true, since I no
longer know how to use my telephone." -- Stroustrup

Morten Primdahl (18-01-2001)
Kommentar
Fra : Morten Primdahl


Dato : 18-01-01 15:21

Jacob Bunk Nielsen wrote:
>
> Morten Primdahl <morten@caput.com> writes:
>
> > Arrays er undtagelsen, de bliver passed by reference.
>
> Er det nu også det?
> Det er vel kun indholdet det bliver passed by reference.

Natürlich. Array'ets reference bliver passed by value, men
den refererer stadig til sammen objekt - hvis referencer er
uændrede, hvorfor de implicit kan betragtes som passed by
reference, men jo, vi er enige.

Andreas se evt.
http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html

Hvis du ikke selv fik søgt den frem :)

Mvh Morten

>
> public class Test {
>
> public static void minMetode(Integer[] r) {
> r = new Integer[] {new Integer(5)};
> }
>
> public static void main(String[] args) throws Exception {
>
> Integer[] r = new Integer[] {new Integer(2)};
> minMetode(r);
> System.out.println(r[0].intValue());
> }
> }
>
> (ovenstående udskriver 2).
>
> Men efterhånden tror jeg vi er ved at være enige om hvad
> vi mener
>
> --
> Jacob
> "There's an old story about the person who wished his computer were
> as easy to use as his telephone. That wish has come true, since I no
> longer know how to use my telephone." -- Stroustrup

--
Morten Primdahl Caput A/S Tel +45 70 12 24 42
morten@caput.com Nygade 6 Fax +45 70 11 24 42
http://www.caput.com/ DK-1164 Kbh K

Jacob Bunk Nielsen (18-01-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 18-01-01 16:00

Morten Primdahl <morten@caput.com> writes:

> men jo, vi er enige.

Godt

I øvrigt må det samme gælde for Java.util.Vector, og hvad man nu
ellers kan finde på at stoppe andre objekter ned i.

--
Jacob
Don't anthropromorphize computers. They hate that.

Jacob Bunk Nielsen (18-01-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 18-01-01 15:00

"Andreas Andersen" <aa@arweb.dk> writes:

> Hvordan kan det så være at nedenstående udskriver 2 - java.lang.Integer er
> da ikke en simpel type.

Nej, java.lang.Integer er ikke en simpel type.

> public class Test {
> public static void minMetode(Integer r) {
> r = new Integer(5);
> }

Her laver du jo et nyt objekt, og r i din minMetode er
ikke længere en reference til det samme objekt, som r
i din main-metode.

--
Jacob
"Beware of bugs in the above code; I have only proved it correct,
not tried it." -- Donald Knuth

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste