Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

8.4.1 Miksi viitteet?

C- kielessä osoittimet piti opetella heti ohjelmoinnin alussa, jos halusi tehdä minkäänlaisia järkeviä aliohjelmia. C++:ssa ongelmaa voidaan kiertää viitemuuttujien ( references) avulla. Javassa on myös vastaava käsite, eli kaikki Javan olio-muuttujat ovat tosiasiassa viitemuuttujia. Ne ovat kuitenkin tietyssä mielessä perinteisen C:n osoittimen ja C++:n viitteen välimuoto. Javan viitemuuttujan voi laittaa osoittamaan toistakin oliota kesken koodin. C++:n viitemuuttuja osoittaa aina samaan olioon, mihin se luotiin osoittamaan.

Tutkimme seuraavaksi Javan viitemuuttujien käyttäytymistä. Tehdään ohjelma, jossa päällisin puolin näyttäisi olevan kaksi samanlaista merkkijonoa ja kaksi samanlaista kokonaislukuoliota. Merkkijonot ovat Javassa olioita ja merkkijonomuuttujat viitteitä noihin olioihin.

java-muut\Jonotesti.java - merkkijonoviitteet

	/**
	 * Tutkitaan olioviitteiden käyttäytymistä
	 * @author Vesa Lappalainen
	 * @version 1.0, 08.01.20003
	 */
	class Jonotesti {
	
	  private static void tulosta(boolean b) {
	    if ( b ) System.out.println("Samat ovat");
	    else System.out.println("Erilaiset ovat");
	  }
	
	  public static void main(String[] args) {
	    String s1 = "eka";
	    String s2 = new String("eka");
	
	    tulosta(s1 == s2);       // Erilaiset ovat
	    tulosta(s1.equals(s2));  // Samat ovat
	
	    int i1 = 11;
	    int i2 = 10 + 1;
	
	    tulosta(i1 == i2);       // Samat ovat
	
	    Integer io1 = new Integer(3);
	    Integer io2 = new Integer(3);
	
	    tulosta(io1 == io2);       // Erilaiset ovat
	    tulosta(io1.equals(io2));  // Samat ovat
	    tulosta(io1.intValue()== io2.intValue()); // Samat ovat
	
	    s2 = s1;
	    tulosta(s1 == s2);         // Samat ovat
	  }
	}
	

Koodin on rivien viereen kommentoitu mitä mikäkin rivi tulostaisi.

Javassa on kahden tyyppisiä muuttujia, aikaisemmin lueteltuja perustyyppisiä ( boolean, char, byte, short, int, long, float, double ) muuttujia ja sitten oliomuuttujia. Oliomuuttujat Javassa ovat aina vain viitteitä todellisiin olioihin. Edellisessä esimerkissä muuttujat s1,s2,io1,io2 ovat olioviitteitä. Silti olioviitteistä puhekielessä käytetään helposti nimitystä olio.


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys