int,long,double,char,boolean är
primitiva, dvs inbyggda i språket.
Dessutom kan varje klassnamn användas som objekttyp.
Det gäller ens egna klasser men framför allt alla klasser i
javas standardpaket. En sådan klass är String.
Låt oss jämföra dessa båda deklarationer.
double pi=3.141592653589793; String namn="Agaton Banan";Den första deklarationen får datorn att avsätta ett minnesfack som rymmer arton siffror, kalla facket för
pi och lagra
det angivna värdet där. Den andra deklarationen får datorn att
avsätta ett minnesfack som rymmer ett stort heltal (arton siffror),
kalla facket för namn och lagra det långa namnet någon
helt annan stans i minnet! Det skulle ändå inte ha fått plats i
det lilla minnesfacket. Där lagrar man bara adressen till den plats
i minnet där texten verkligen finns.
Anta nu att det längre ner i programmet står följande.
pi=2.718281828459045; namn="Sven-Hubert Pump";Den första tilldelningen betyder att det nya värdet lagras i minnesfacket
pi och att det gamla värdet försvinner. Den andra tilldelningen
betyder att det nya namnet lagras någon helt annan stans i minnet och att
adressen dit lagras i det lilla minnesfacket. Agaton Banan
finns fortfarande kvar i minnet, men om han är helt bortglömd, dvs adressen
dit inte finns sparad någonstans, kommer en automatisk skräpsamling
(eng. garbage collection) att återvinna minnesutrymmet.
String ord="banan";
String år="År ";
ord=Mio.GetWord();
namn=Mio.GetLine();
ord=år+19+99; // Ger ord="År 1999"
ord=19+99+tom; // Ger ord="118År "
if(namn==ord) kollar bara om det står
samma minnesadress i båda variablerna, dvs om dom pekar på
samma textobjekt. För att jämföra innehållet
i textobjekten skriver man if(namn.equal(ord).
String ord="banan" är ord.length()=5
och ord.charAt(0)='b'. Så här skriver man ut ordet bakfram.
String bakfram="" ;
int i=ord.length() ;
while(i-->0) bakfram+=ord.charAt(i) ;
System.out.println(bakfram) ;
När man startar programmet kan man ange att inläsningen ska göras från
en fil i stället för från tangenterna. Anta att filen data.reg
består av rader med personnummer och namn och att man vill ha ut alla
damerna på skärmen.
// java Damer <data.reg skriver ut följande
// 410423-1206 Eriksson, Gerd
// 720623-0067 Löfdahl, Jonna
class Damer {
public static void main(String[] args) {
while(!Mio.EOF()) {
String rad=Mio.GetLine() ;
if(rad.charAt(9)%2==0) System.out.println(rad) ;}}}
args[0],
args[1] etc. Sökning i registret kan enklast
göras så här.
// java Leta 640826-1052 <data.reg skriver ut
// Viggo Kann
class Leta {
public static void main(String[] args) {
String pnr=args[0] ;
while(!Mio.EOF()) {
String rad=Mio.GetLine() ;
if(rad.substring(0,11).equals(pnr)) {
int i=rad.indexOf(',') ;
int n=rad.length() ;
System.out.println(rad.substring(i+2,n)+rad.substring(11,i));
return ;}}
System.out.println(pnr+" finns inte i registret.") ;}}
Tionde siffran har valts så att nedanstående uträkning visar om det är
något fel i personnumret.
// java Kolla 420119-0818 <data.reg skriver ut
// RÄTT PNR; 420119-0818
class Kolla {
public static void main(String[] args) {
String pnr=args[0].substring(0,6)+args[0].substring(7,11) ;
int summa=0 ;
for(int i=0;i<10;i++) {
int x=pnr.charAt(i)-48 ;
if(i%2==0) x=2*x ;
summa=summa+x/10+x%10 ;}
if(summa%10==0) System.out.println("RÄTT PNR: "+args[0]) ;
else System.out.println("FEL PNR: "+args[0]) ;}}
Anropet ord.index.Of(tkn) returnerar -1 om tecknet inte
finns i ordet. Det är användbart för att känna igen vokaler - något
som behövs i vissa hemliga språk såsom A-språket.
// Jag heter olle översätts till
// Jag hatar alla
class Aspraket {
public static void main(String[] args) {
String vokaler="aeiouyåäö" ;
while(!Mio.EOF()) {
char tkn=Mio.GetChar() ;
if(vokaler.indexOf(tkn)>-1) tkn='a' ;
System.out.print(tkn) ;}}}