Arvon välitys Javassa
Ymmärtäkää Javan arvon välitys: primitiivit ja viitteet, uudelleensijoitus ja mutaatio sekä taulukoihin ja muuttumattomuuteen liittyvät sudenkuopat.
Arvon välitys Javassa on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 3 oppituntia.
Arvon välityksen yleiskatsaus
Tavoite: Opetella, miten Java välittää parametreja. Primitivi- ja viitetyyppejä verrataan uudelleensijoittamiseen ja muuttamiseen, taulukoihin sekä muuttumattomuuteen.
Primitiivien kopiointi
Primitiivit välitetään arvona: kutsuttu metodi saa kopion. Parametrin uudelleensijoittaminen ei muuta kutsujan muuttujaa.
public class Main {
static void inc(int x) {
x = x + 1; // modifies the local copy only
}
public static void main(String[] args) {
int a = 5;
inc(a);
System.out.println("a after inc(a) = " + a); // still 5
}
}
Viitteet: muuttaminen vs. uudelleensijoittaminen
Olioiden tapauksessa viite kopioidaan. Sen kautta tehdyt muutokset vaikuttavat kutsujan olioon, mutta parametrin uudelleensijoittaminen ei vaikuta siihen.
public class Main {
static class Box { int n; }
static void setTo999(Box b) { b.n = 999; } // mutate via copied reference
static void reassign(Box b) { b = new Box(); b.n = 123; } // reassign local copy only
public static void main(String[] args) {
Box bx = new Box();
bx.n = 10;
setTo999(bx);
System.out.println("after setTo999: bx.n = " + bx.n); // 999
reassign(bx);
System.out.println("after reassign: bx.n = " + bx.n); // still 999
}
}
Taulukot: muuttaminen vs. uudelleensijoittaminen
Taulukot ovat olioita. Taulukon muuttaminen vaikuttaa kutsujaan, mutta parametrin uudelleensijoittaminen ei korvaa kutsujan taulukkoa.
public class Main {
static void fillZero(int[] a) {
for (int i = 0; i < a.length; i = i + 1) a[i] = 0; // mutate caller array
}
static void replace(int[] a) {
a = new int[] {9, 9, 9}; // reassign local copy of the reference
}
public static void main(String[] args) {
int[] arr = {1, 2, 3};
fillZero(arr);
System.out.println("after fillZero: " + arr[0] + "," + arr[1] + "," + arr[2]); // 0,0,0
replace(arr);
System.out.println("after replace: " + arr[0] + "," + arr[1] + "," + arr[2]); // still 0,0,0
}
}
Muuttumaton vs. muuttuva
String on muuttumaton ja palauttaa uusia olioita; StringBuilder on muuttuva ja muuttaa samaa instanssia.
public class Main {
static void tryChangeString(String s) {
s = s + "!"; // new String; original unchanged
}
static void changeBuilder(StringBuilder sb) {
sb.append("!"); // mutates same object
}
public static void main(String[] args) {
String s = "hi";
tryChangeString(s);
System.out.println("after tryChangeString: " + s); // "hi"
StringBuilder sb = new StringBuilder("hi");
changeBuilder(sb);
System.out.println("after changeBuilder: " + sb.toString()); // "hi!"
}
}
Oikeaoppinen vaihto
Koska parametrit ovat kopioita, primitiivien vaihtaminen metodin sisällä ei vaikuta kutsujaan. Palauta uudet arvot tai säilö ne säilöolioon.
public class Main {
static void trySwap(int a, int b) {
int t = a; a = b; b = t; // swaps local copies only
}
static int[] swap(int a, int b) {
return new int[] { b, a }; // return results to the caller
}
public static void main(String[] args) {
int x = 1, y = 2;
trySwap(x, y);
System.out.println("after trySwap: x=" + x + ", y=" + y); // 1,2
int[] res = swap(x, y);
x = res[0]; y = res[1];
System.out.println("after swap: x=" + x + ", y=" + y); // 2,1
}
}
Arvon välityksen tarkistus
Pikatarkistus: Mikä Java-parametrien välitystä koskeva väite on oikein?
Kertaus ja seuraava aihe
Kertaus: Tutustuttiin primitiiveihin ja viitteisiin, muuttamiseen ja uudelleensijoittamiseen, olioina toimiviin taulukoihin, muuttumattomuuteen sekä turvalliseen vaihtokuvioon. Seuraavaksi käsitellään staattisia ja instanssimetodeja.
Opi Java tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 104
- Oppitunnit
- 374
Usein kysytyt kysymykset
Onko oppitunti ”Arvon välitys Javassa” ilmainen?
Kyllä – oppitunnin ”Arvon välitys Javassa” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 3 oppituntia.
Mitä opin oppitunnilla ”Arvon välitys Javassa”?
Ymmärtäkää Javan arvon välitys: primitiivit ja viitteet, uudelleensijoitus ja mutaatio sekä taulukoihin ja muuttumattomuuteen liittyvät sudenkuopat. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/3.
Kuinka kauan ”Arvon välitys Javassa”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?
Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Arvon välitys Javassa
- Staattiset ja instanssimetodit
- Metodien hajottaminen ja siisti koodi