Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: String-muuttujan arvon vaihtaminen funktiossa

Burton [23.11.2010 07:18:15]

#

Miten ihmeessä String-muuttujaa voi muokata funktion sisällä, jos se on määritelty eri aliohjelmassa? Olen viettänyt koko aamun Googlen parissa, mutta en tunnu löytävän oikeita hakusanoja.

Kirjoitin testiohjelman näin:

public static void aliohjelma(String mj) {
  mj = "testi";
}

public static void main(String ag[]) {
  String merkkijono = null;

  aliohjelma(merkkijono);

  System.out.print(merkkijono); // tulostaa null
}

Eikä tämä ilmeisesti toimi. Tietenkin returnin avulla homma toimii, mutta se on todella epäkäytännöllinen tapa, jos haluaa muokata useita String-muuttujia aliohjelmassa.

tsuriga [23.11.2010 08:41:30]

#

String on mallia immutable, ts. jokainen muutos merkkijonoon luo taustalla uuden merkkijono-olion. Käytä tarvittaessa StringBuilderia. Paluuarvot ovat kivoja.

tkok [23.11.2010 11:50:26]

#

String-muuttuja on viittaus muistipaikkaan, josta löytyy tekstiä sisältävä olio. Funktiokutsussa kopioituu merkkijono-Stringin osoite mj nimiseen muuttujaan. Nämä kaksi muuttujaa siis osoittavat samaan paikkaan muistissa, joten muutokset molemmille oliolle vaikuttavat samaan muistipaikkaan.

Chiman [23.11.2010 12:27:47]

#

tkok kirjoitti:

Funktiokutsussa kopioituu merkkijono-Stringin osoite mj nimiseen muuttujaan.

Kuitenkin funktion sisällä mj asetetaan heti viittaamaan toiseen merkkijono-olioon, "testi", joten yhteys argumentin viittaamaan olioon katoaa.

tkok kirjoitti:

Nämä kaksi muuttujaa siis osoittavat samaan paikkaan muistissa, joten muutokset molemmille oliolle vaikuttavat samaan muistipaikkaan.

Mihin tämä liittyy? Tuollaista muutosta ei merkkijono-oliolle voi Javassa tehdä.

eq [23.11.2010 14:40:33]

#

Burton kirjoitti:

Eikä tämä ilmeisesti toimi. Tietenkin returnin avulla homma toimii, mutta se on todella epäkäytännöllinen tapa, jos haluaa muokata useita String-muuttujia aliohjelmassa.

Java on epäkäytännöllinen monessa suhteessa... ;-)

Tee uusi (merkkijonoja sisältävä) olio, niistä kielen parissa pidetään.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta