07. september 2004 - 17:48Der er
10 kommentarer og 1 løsning
Arrays i Java
Hvordan er det lige arrays fungerer i Java?
Jeg er gammel VB-nørd, og derfor er det oplagt at stille flg. spørgsmål:
- hvordan kreerer man et dynamisk array (er der overhovedet et statisk...)? - hvordan redimensionerer man et array senere? - Hvordan får man returneret et arrays dimensioner, dvs antallet af elementer i array´et?
Ok. Tak. Et ekstra spørgsmål så: Hvis jeg har fulgt dit eksempel ovenfor, og har array a med 123 elementer, som jeg så kopierer til array b med 124 elementer... kan jeg så sætte a=b, og dermed overskrive det gamle array a?
Spørgsmålet har to sider: 1) kan man destruere et objekt ved bare at sætte det til at være noget andet, og 2) kan man kopiere et array uden at kopiere det enkelte element?
Når der ikke længere er en reference til et objekt (herunder et array) så vil Java runtime garbage collecte det på et tidspunkt når Java runtime synes at der er tid for det (f.eks. den skal have frigivet noget memory).
Arne, du er min redning idag. Du siger, at a=b vil få a til at pege på samme objekt. Hvorfor har jeg så brug for arraycopy, elementerne burde jo være de samme?
lad os sige at jeg har a med 123 elementer. Operationen går ud på, at jeg skal indsætte en ny værdi på den 124. plads. Altså skal array´et udvides.
Jeg laver array b med 124 pladser, kopierer de enkelte elementer med FOR (kan jeg bruge arraycopy her?).
Hvad gør jeg nu? Sætter jeg a=b, eller er jeg nødt til at kopiere manuelt tilbage?
int[] a = new int[123]; // referencen a peger på et int array med 123 elementer
int[] b = new int[124]; // referencen b peger på et int array med 124 elementer
a = b; // både a og b peger på arrayet med 123 elementer - arrayet med 124 elementer klar til GC
System.arraycopy(a, 0, b, 0, a.length); // kopierer 123 elementer fra a til b - a og b peger på det samme som hidtil a = null; // arrayet med 123 elementer klar til GC
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.