Helsingin yliopisto
/Tietojenkäsittelytieteen
laitos
581258-1 Johdatus ohjelmointiin
(c)Arto Wikla, 1997
Javan ja C++:n (ja C:n) eroja
(Muutettu viimeksi 10.9.1997)
Javan 'mikrorakenne' - lauseet ja lausekket - on kotoisin C++:sta,
siis oikestaan C:stä. Kielessä on tietenkin paljon vaikutteita muista
oliokielistä, mutta siinä voi nähdä jälkiä myös kehityslinjasta,
jonka aloitti Algol60, ja jota myös esimerkiksi Pascal edustaa:
vahva tyypitys on tärkein esimerkki. Java on tapana lukea kuitenkin
C:n ja C++:n kehityslinjaan.
Seuraavassa on luettelo muutamista Javan ja C++:n eroista. Luettelo
ei ole läheskään täydellinen, mutta silti siitä lie hyötyä
C-taustaisille opiskelijoille. Tämän sivun ymmärtäminen ei ole
kuitenkaan välttämätöntä kurssilla mukana pysymiseksi.
- Javassa ei ole "muistiosoitepointtereita" eikä siis
osoitearitmetiikkaa (mutta kaikkia olioita loppujen lopuksi
käsitellään osoittimien kautta)
- taulukot ovat olioita ja indeksien rajat tarkistetaan
- merkkijonot ovat olioita, eivät '\0'-merkkiin päättyviä
muistialueita
- Javassa on automaattinen muistinhallinta, siivousprosessi
toimii koko ajan taustalla (kun olioon ei ole enää yhtään
viitettä, olio on "roskaa", jonka tila vapautetaan
automaattisesti)
- ei etumerkitöntä kokonaislukutyyppiä (paitsi 16 bitin char)
- boolean tyyppi ei ole int, eikä int ole boolean
- Javassa ei ole määrittelyitä struct, union, typedef
- tyyppimuunnos (cast) tehdään automaattisesti vain kun tietoa
ei voi kadota
- ei operaattoreiden kuormitusta (mutta '+' on valmiiksi myös
merkkijonokatenaattori)
- ei vaihtuvaa parametrilukumäärää (mutta kylläkin metodien
kuormitus)
- ei #define-makroja
- ei geneerisiä template-luokkia (mutta Javassa on luokka 'Object',
kaikkien luokkien yliluokka)
- ei luokkien moniperintää (mutta on liittymien ('interface')
moniperintä)
- kaikki funktiot ovat metodeita
- jokainen metodi kuuluu johonkin luokkaan
- ei goto-lausetta (mutta break ja continue, myös osoitteellisina)
Takaisin luvun 1 sisällysluetteloon.