ABjp10 Skrevet 1. desember 2010 Del Skrevet 1. desember 2010 Hei, jeg lurer på om noen som vet hvorfor koden nedenfor skriver ut "200, 200"? /** Hva vil programmet skrive ut når det blir utført? */ public class Ting { private int snr; Ting(int snr) { this.snr = snr; } public static void main(String[] args) { Ting t1 = new Ting(100); Ting t2 = t1; miksfiks(t1, t2); System.out.println(t1 + "," + t2); } private static void miksfiks(Ting tt1, Ting tt2) { tt2.snr = 200; tt1 = null; } public String toString() { return "" + snr; } } Lenke til kommentar
quantum Skrevet 1. desember 2010 Del Skrevet 1. desember 2010 Du lurer på hvorfor t1 ikke er null når du skriver ut System.out.println(t1 + "," + t2); Du har jo satt tt1 = null i miksfiks-funksjonen, ikkesant? Det er fordi parameterne til miksfiks er referansevariable, de inneholder adresser. Når du instansierer en Ting slik Ting t1 = new Ting(100); ... kan du tenke på det som om du får allokert en oppbevaringsboks med nummer 1234, denne adressen lagres i referansevariablen t1. Ting t2 = t1; Nå ligger også referanseverdien 1234 i referansevariablen t2. Så kaller du metoden din miksfiks(t1, t2); og den er deklarert slik: private static void miksfiks(Ting tt1, Ting tt2) { tt2.snr = 200; tt1 = null; } Merk at denne har *sine egne* referansevariable i parameterne. "By reference" er altså egentlig "Reference by value" i Java. Du har altså nå t1, tt1, t2, tt2 som alle er referansevariable som inneholder referanseverdien 1234. tt2.snr = 200; Dette betyr at du setter verdien til attributtet snr på objektinstansen som ligger i oppbevaringsboksen med nummer 1234 til 200. Helt rettfram. tt1 = null; Men dette betyr bare at du nuller ut referanseverdien i referansevariablen tt1. t1 skjer det ingenting med, den inneholder altså referansen 1234 fortsatt (samme som t2), og instansen i den oppbevaringsboksen har verdien 200 i snr-attributtet, som du ser av utskriften ;-) (Setter du t1 = null; rett før utskriften får du det resultatet du kanskje forventet.) Lenke til kommentar
ABjp10 Skrevet 1. desember 2010 Forfatter Del Skrevet 1. desember 2010 Tusen takk for forklaring. Jeg henger med :-D Ha en fin kveld :-) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå