Predavanje br. index|1|2|3|4|5|6|7|8|9|10|11|12|13|14|HOME


Drugo predavanje – proceduralna sintaksa

Primitivni tipovi podataka – operatori – razmak – literali – identifikatori – kljuène rijeèi – separatori – zbrajanje cijelih brojeva – zbrajanje brojeva tipa double – množenje i dijeljenje – neoèekivani kvocijenti – raèunanje ostatka, modulo – prioritet izvršavanja operatora – zagrade – miješanje tipova podataka – automatsko dodjeljivanje tipova podataka (casting) – pretvaranje stringova u brojeve – podaci tipa char – Unicode – naredbe za kontrolu toka – naredba if – ispitivanje jednakosti – klauzula else – klauzula else if – while petlja – for petlja – do while petlja – booleovski podaci – relacijski operatori – prioritet izvršavanja relacijskih operatora – ispitivanje jednakosti objekata – naredba break – naredba continue – labelirane petlje – naredba switch-case – kondicionalni operator (? :) – logièki operatori – prioritet izvršavanja logièkih operatora – deklariranje polja – kreiranje polja – inicijaliziranje polja – metoda System.arraycopy() – deklariranje, alociranje i inicijaliziranje dvodimenzionalnih polja – višedimenzionalna i neuravnotežena polja


Primitivni tipovi podataka

Primitivni tipovi podataka u Javi vrlo su slièni onima u C i C++. To su boolean, byte, short, int, long, float, double i char. Tip boolean je dodan u Javi. Implementacija je meðutim bitno proèišæena na nekoliko naèina.

  1. Dok C i C++ ostavljaju mnoge stvari ovisnima o mašini i kompajleru (npr. duljinu za int), Java specificira sve.
  2. Java ne dopušta pretvaranje tipova izmeðu proizvoljnih varijabli. Dopušteno je pretvaranje jedino meðu numerièkim varijablama te izmeðu podklasa i nadklasa istog objekta.
  3. Sve numerièke varijable u Javi su oznaèene.

boolean

1-bit. Može poprimiti vrijednosti true ili false.

true i false su definirane konstante jezika i nisu isto što i True i False, TRUE i FALSE, nula i ne-nula, 1 i 0 ili bilo koja druga numerièka vrijednost. Ne može se pretvoriti ni u jedan drugi tip varijable niti se drugi tipovi mogu pretvoriti u boolean.

byte

1 oznaèeni byte (komplenent od 2). Pokriva vrijednosti od -128 do 127.

short

2 bytea, oznaèena (komplement od 2), -32,768 to 32,767

int

4 bytea, oznaèena (komplement od 2), od -2,147,483,648 do 2,147,483,647. Kao kod svih numerièkih tipova, moguæe je pretvaranje (casting) u ostale numerièke tipove (byte, short, long, float, double). Kod pretvaranja s gubitkom informacija (lossy casts), npr int u byte, konverzija se obavlja modulo duljina “kraæeg” tipa.

long

8 bytea oznaèenih (komplement od 2), od -9,223,372,036,854,775,808 do +9,223,372,036,854,775,807.

float

4 bytea, IEEE 754, od 1.40129846432481707e-45 do 3.40282346638528860e+38 (positivni ili negativni).

Kao kod svih numerièkih tipova, moguæe je pretvaranje (casting) u ostale numerièke tipove (byte, short, long, int, double). Kod pretvaranja s gubitkom informacija (lossy casts), npr float u short, decimalni dio se odbacuje, i konverzija se obavlja modulo duljina “kraæeg” tipa.

double

8 bytea IEEE 754, od 4.94065645841246544e-324d do 1.79769313486231570e+308d (positivni or negativni).

char

2 bytea, neoznaèena, Unicode, od 0 do 65,535

Vrijednosti tipa char nisu isto što i vrijednosti tipa byte, int, short ili Strings.


Operatori

Operator

Akcija

+

Zbrajanje brojeva, konkatenacija stringova

+=

Zbrajanje i pridruživanje brojeva, konkatenacija i pridruživanje stringova

-

Oduzimanje

-=

Oduzimanje i pridruživanje

*

Množenje

*=

Množenje i pridruživanje

/

Dijeljenje

/=

Dijeljenje i pridruživanje

|

Bitovski OR

|=

Bitovski OR i pridruživanje

^

Bitovski XOR

^=

Bitovski XOR i pridruživanje

&

Bitovski AND

&=

Bitovski AND i pridruživanje

%

Modulo (raèunanje ostatka)

%=

Modulo i pridruživanje

>

Veæe

>=

Veæe ili jednako

<

manje

<=

Manje ili jednako

!

booleovski NOT

!=

razlièito

++

Poveæavanje za jedan

--

Smanjivanje za jedan

>>

Shift – pomak bitova u desno, zajedno sa znakom

>>=

Shift – pomak bitova u desno, zajedno sa znakom i pridruživanje

<<

Shift – pomak bitova u lijevo

<<=

Shift – pomak bitova u lijevo i pridruživanje

>>>

Neoznaèeni bitovski shift u desno

>>>=

Neoznaèeni bitovski shift u desno i pridruživanje

&&

Booleovski AND

||

Booleovski OR

==

Booleovska jednakost

=

Pridruživanje

~

Bitovski NOT

?:

Uvjet

instanceof

Provjera tipa


Razmak (white space)

Razmak je u pravilu znak [space], koji dobijete kad pritisnete <spacebar> no u Javi postoje još 4 znaka za razmak: [horizontal tab], [form feed], [carriage return] i [linefeed]. Ovisno o platformi, kad pritisnete tipku <return> ili <enter>, dobit æete [carriage return] (MAC), [linefeed] (UNIX) ili oboje (DOS, Windows, VMS). To æe proizvesti tvrdi prijelom linije u tekstu izvornog programa.

Osim u literalima tipa String, jedan razmak je ekvivalentan nizu uzastopnih razmaka bilo koje vrste.

Unutar literala tipa String i char jedini dozvoljeni razmak je znak [space]. Umjesto znakova [horizontal tab], [form feed], [carriage return] i [linefeed] moraju se stavljati odgovarajuæe escape-sekvence, npr. \t, \r, \f i \n. Ne možete razlomiti string ovako:

String poem = "Mary had a little lamb
whose fleece was white as snow
and everywhere that Mary went
the lamb was sure to go.";
 

Umjesto toga trebate koristiti znakove \n i operator konkatenacije +, ovako:

 
String poem = "Mary had a little lamb\n" +
"whose fleece was white as snow\n" +
"and everywhere that Mary went\n" +
"the lamb was sure to go.";
 

Primijetite da naredbe možete razlomiti kroz nekoliko redaka, jedino ne možete to uèiniti sa literalima tipa String. Takoðer primijetite da \n funkcionira samo na UNIX-u. Ako želite svoj kod uèiniti neovisnim o platformi, umjesto \n upotrijebit æete metodu System.getProperty("line.separator") koja æe vratiti odgovarajuæi znak za danu platformu. Pogledajte takoðer i metodu System.getProperties().

Java nema sve escape-sekvence koje ima C. Osim veæ spomenutih, to su još samo \b za [backspace] i \\ za sam [backslash]. No mogu se koristiti i \u sekvence koje dozvoljavaju umetanje bilo kojeg Unicode znaka.


Literali

Literali tipa String oznaèavaju se dvostrukim navodnicima, npr “Hello World!”. Takoðer, “dva” + “dva” je isto što i “dvadva”. Navodnici, meðutim nisu dio literala. Vrijednost literala “Hello World!” je Hello World!, a ne “Hello World!”. Takoðer formatiranje znakova nema utjecaja na vrijednost stringa, dakle “Hello World!” je isto što i “Hello World!”.

Literali tipa char oznaèavaju se jednostrukim navodnicima i smiju sadržavati toèno jedno slovo, npr. ¸’c’ je literal tipa char èija vrijednost je slovo c.

Booleovski literali su true i false, a znaèe istinu i laž.

Brojevi mogu takoðer biti literali. Npr. 34 je literal tipa int i njegova je vrijednost broj 34, dok je 1.5 literal tipa double , a to su i 45.6, 76.4E8 (76.4 puta 10 na osmu) i -32.0.

Nadalje, 34L je literal tipa long i oznaèava broj 34, dok su 1.5F, 45.6f i 76.4E8F literali tipa float.


Identifikatori

Identifikatori su imena variabli, metoda, klasa, paketa i suèelja. Za razliku od literala to nisu same stvari nego naèin njihovog referenciranja. U programu HelloWorld identifikatori su HelloWorld, String, args, main i System.out.println.

Identifikatori moraju biti sastavljeni od slova, brojeva i znakova _ (underscore) i “$ (dollar sign). Poèetno slovo identifikatora smije biti samo slovo, _ ili $. Mala i velika slova se razlikuju. Ime ne može sadržavati razmak.

Ovo su primjeri legalnih varijabli u Javi:

Sljedeæih nekoliko primjera nisu valjana imena varijabli:


Kljuène rijeèi

Postoji 50 rezerviranih kljuènih rijeèi koje u Javi 1.1 (51 u Javi 1.2). U tablici je navedeno njih 48 koje se stvarno koriste.

Keyword

Purpose

abstract

Deklarira apstraktnu klasu ili metodu

boolean

Deklarira booleovsku varijablu ili povratni tip (return type)

break

Prijevremeni izlazak iz petlje

byte

Deklarira byte varijablu ili povratni tip

case

Jedna od grana u naredbi switch

catch

Obrada iznimke

char

deklarira char variablu ili povratni tip

class

Oznaèava poèetak definiranja klase

continue

Prijevremeni povratak na poèetak petlje

default

default akcija za switch naredbu

Do

Poèetak do while petlje

double

deklarira double variablu ili povratni tip

Else

Oznaèava dio koda koji se izvršava ako uvjet u if naredbi nije istinit

extends

Oznaèava da je promatrana klasa potklasa neke druge klase

Final

Deklarira da klasa ne može imati podklasu ili da varijabla ili metoda ne može bit pregažena

finally

Deklarira blok koda koji æe garantirano biti izveden

Float

deklarira float variablu ili povratni tip

For

Poèetak for petlje

If

Izvršava kod ako je uvjet istinit

implements

Deklarira da promatrana klasa implementira dano suèelje

import

Dopušta pristup klasi ili grupi klasa unutar paketa

instanceof

Ispituje da li je objekt instanca neke klase

Int

deklarira int (integer) variablu ili povratni tip

interface

Oznaèava poèetak definiranja suèelja

Long

deklarira long (long integer) variablu ili povratni tip

native

Deklarira da je metoda implementirana u drugom programskom jeziku

New

Alocira novi object

package

Definira paket kojemu pripada datoteka sa promatranim izvornim kodom

private

Deklarira metodu ili member varijablu kao privatnu

protected

Deklarira klasu, metodu ili member varijablu kao zaštiæenu

public

Deklarira klasu, metodu ili member varijablu kao javnu

return

Vraæa vrijednost iz metode

Short

deklarira short (short integer) variablu ili povratni tip

static

Deklarira da varijabla ili metoda pripada klasi, a ne objektu

Super

Referenca na roditelja promatranog objekta

switch

Ispituje istinitost nekoliko moguæih uvjeta

synchronized

Oznaèava da je promatrani dio koda osjetljiv na threadove

this

Referenca na sam promatrani objekt

throw

Odbacivanje iznimke

throws

Deklarira iznimke koje metoda odbacuje

transient

Varijabla ne smije biti serijalizirana

try

Pokušava izvršiti operaciju koja može eventualno odbaciti iznimku

void

Deklarira da metoda ne vraæa nikakvu vrijednost

volatile

Upozorava kompajler da se varijabla mijenja asinhrono

while

Poèetak while petlje

Još dvije, const i goto, rezervirane su, ali nisu implementirane. To omoguæuje kompajleru bolje kreiranje poruka o pogreškama u sluèaju krive upotrebe ovih uobièajenih kljuènih rijeèi jezika C++ u Java programima.

Java 1.2 dodaje kljuènu rijeè strictfp kojom se deklarira da metoda ili klasa mora biti izvršena sa egzaktnom IEEE 754 semantikom.

Primijetite da true and false nisu kljuène rijeèi nego booleovski literali. Svejedno, ni njih ne možete koristiti kao imena varijabli.


Separatori

Separatori pomažu u definiranju structure programa. U programu HelloWorld koriste se zagrade, ( ), vitièaste zagrade, { }, toèka, ., toèka-zarez, ;.

 

Separator

Svrha

( )

Zatvara argumente u definicijama i pozivima metoda; podešava prioritete izvršavanja u aritmetièkim izrazima; okružuje umjetno pretvorene tipove podataka (cast types); izdvaja uvjetne izraze u naredbama za kontrolu toka

{ }

Definira blokove koda; automatski inicijalizira polja

[ ]

Deklarira polje tipova; izdvaja vrijednosti elemenata polja

;

Završava naredbu

,

Razdvaja nanizane identifikatore u deklaracijama varijabli; ulanèava naredbe u uvjetnom dijelu for petlje

.

Selektira varijablu ili metodu nekog objekta; separira imena paketa od imena podpakete i imena klasa

:

Koristi se nakon labela u petljama


Zbrajanje cijelih brojeva

class AddInts {
 
  public static void main (String args[]) {
 
    int i = 1;
    int j = 2;
    int k;
 
    System.out.println("i je " + i);
    System.out.println("j je " + j);
  
    k = i + j;
    System.out.println("i + j je " + k);
    
    k = i - j;
    System.out.println("i - j je " + k);
 
  }
 
} 
 

Evo što se dogaða kad izvršite AddInts:

 
% javac AddInts.java
% java AddInts
i je 1
j je 2
i + j je 3
i - j je -1
%

Zbrajanje brojeva tipa double

Brojevi tipa double sadrže decimalnu toèku .

 
class AddDoubles {
 
  public static void main (String args[]) {
 
    double x = 7.5;
    double y = 5.4; 
    double z;
 
 
    System.out.println("x je " + x);
    System.out.println("y je " + y);
  
    z = x + y;
    System.out.println("x + y je " + z);
    
    z = x - y;
    System.out.println("x - y je " + z);
 
  }
 
 } 

Evo rezultata:

 
% javac AddDoubles.java
% java AddDoubles
x je 7.5
y je 5.4
x + y je 12.9
x - y je 2.0999999999999996

Množenje i dijeljenje

Operatori množenja i dijeljenja su * (množenje) i / (dijeljenje).

 
class MultiplyDivide {
 
  public static void main (String args[]) {
 
    int i = 10;
    int j = 2;
    int k;
 
    System.out.println("i je " + i);
    System.out.println("j je " + j);
  
    k = i/j;
    System.out.println("i/j je " + k);
    k = i * j;
    System.out.println("i * j je " + k);
 
  }
 
}

Rezultat: 

 
% javac MultiplyDivide.java
% java MultiplyDivide
i je 10
j je 2
i/j je 5
i * j je 20
%
 

Realni brojevi tipa float i double množe se i dijele na isti naèin. U sluèaju cjelobrojnog dijeljenja, rezultat se zaokružuje prema dolje. Npr. cjelobrojno dijeljenje 10 sa 3 daje 3.


Neoèekivani kvocijenti

2/3 = 0 

3/2 = 1

1/0 = ArithmeticException

0/0 = ArithmeticException

1.0/0.0 = Inf

1.0/0 = Inf

0.0/0.0 = NaN (not a number)

-1.0/0.0 = -Inf

Inf + 1 = Inf

Inf + Inf = Inf

Inf - Inf = NaN

Inf/Inf = NaN

NaN + anything = NaN

NaN - anything = NaN

NaN * anything = NaN

NaN - anything = NaN

NaN < NaN je false

NaN > NaN je false

NaN <= NaN je false

NaN >= NaN je false

NaN == NaN je false

NaN != NaN je true


Raèunanje ostatka - modulo

Operator za raèunanje ostatka dijeljenja dvaju brojeva (modulo) je %.

 
class Remainder {
 
  public static void main (String args[]) {
 
    int i = 10;
    int j = 3;
    int k;
 
    System.out.println("i je " + i);
    System.out.println("j je " + j);
  
    k = i%j;
    System.out.println("i%j je " + k);
  }
 
}

Izlaz:

 
% javac Remainder.java
% java Remainder
i je 10
j je 3
i%j je 1
%
 

Primijetite da se operacija modulo može u Javi primijeniti i na realne brojeve. Npr. 5.5 % 1.5 je 1.


Prioritet izvršavanja operatora

Više operatora može biti u istom izrazu:

int m = 1 + 2 + 3 + 4 + 5;

Sljedeæi program raèuna energiju ekvivalentnu masi jednog elektrona uz pomoæ Einsteinove formule E = mc2.

class mc2 {
  public static void main (String args[]) {
 
    double mass = 9.1096E-25;
    double c = 2.998E8;
    double E = mass * c * c;
    System.out.println(E);
  }
}
 

Izlaz:

 
% javac mc2.java
% java mc2
8.18771e-08
%
 

U sluèaju razlièitih operatora, prioritet je uobièajen: Sljedeæe tri naredbe su ekvivalentne

 
int n = 1 - 2 * 3 - 4 + 5;
int n = 1 - (2 * 3) - 4 + 5;
int n= -4;
 

Unutar do sada spomenutih operatora, operacije se izvršavaju sljedeæim prioritetom:

  1. *, /, % Sva množenja, dijeljenja i modulo od lijeva na desno.
  2. +, - Sva zbrajanja i oduzimanja od lijeva na desno.
  3. = Pridruživanje desne strane lijevoj

Zagrade

Zagrade se koriste za mijenjanje uobièajenog redosljeda operacija. Sljedeæi primjer pokazuje pretvaranje Fahrenheitovih stupnjeva u Celsiusove po formuli C = (5/9) (F - 32) gdje su C stupnjevi Celsiusa a F stupnjevi Fahrenheita. Program ispisuje tablicu konverzija izmeðu 0 i 300 stupnjeva Fahrenheita za svakih 20 stupnjeva.

 
// Ispisuje tablicu konverzije Fahrenheita u Celsiuse
 
class FahrToCelsius  {
 
  public static void main (String args[]) {
  
    double fahr, celsius;
    double lower, upper, step;
 
    // donja granica temperaturne tablice
    lower = 0.0;  
 
    // gornja granica temperaturne tablice
    upper = 300.0;
 
    // velicina koraka
    step  = 20.0; 
 
    fahr = lower;
    while (fahr <= upper) { 
      celsius = (5.0 / 9.0) * (fahr-32.0);
      System.out.println(fahr + " F = " + celsius + " C");
      fahr = fahr + step;
    } 
 
  } 
 
} 
 

Obrada i izlaz:

 
% javac FahrToCelsius.java
% java FahrToCelsius
0.0 F = -17.77777777777778 C
20.0 F = -6.666666666666667 C
40.0 F = 4.444444444444445 C
60.0 F = 15.555555555555557 C
80.0 F = 26.666666666666668 C
100.0 F = 37.77777777777778 C
120.0 F = 48.88888888888889 C
140.0 F = 60.0 C
160.0 F = 71.11111111111111 C
180.0 F = 82.22222222222223 C
200.0 F = 93.33333333333334 C
220.0 F = 104.44444444444444 C
240.0 F = 115.55555555555556 C
260.0 F = 126.66666666666667 C
280.0 F = 137.77777777777777 C
300.0 F = 148.88888888888889 C
%
 

 

U ovom programu nema mnogo novog u odnosu na prethodne primjere, no pažnju obratimo na sljedeæu liniju:

 
celsius = (5.0 / 9.0) * (fahr-32.0);
 

To je prijevod formule C = (5/9)(F - 32) gdje je dodana * za množenje jer Java ne podržava implicitno množenje faktora u zagradama. Zagrade se koriste kao i u obiènoj algebri, za prilagodbu pravila prioriteta. Za operacije koje koriste uobièajene aritmetièke operatore (+, -, *, /), pravila prioriteta su ista kao i u obiènoj algebri.


Miješanje tipova podataka

Razlièiti tipovi podataka mogu se pojaviti u istoj naredbi. Primjer pokazuje istovremenu upotrebu int i double.

 
class IntAndDouble {
 
  public static void main (String args[]) {
 
    int i = 10;
    double x = 2.5;
    double k;
 
    System.out.println("i je " + i);
    System.out.println("x je " + x);
  
    k = i + x;
    System.out.println("i + x je " + k);
    k = i * x;
    System.out.println("i * x je " + k);
    k = i - x;
    System.out.println("i - x je " + k);
    k = x - i;
    System.out.println("x - i je " + k);
    k = i / x;
    System.out.println("i / x je " + k);
    k = x / i;
    System.out.println("x / i je " + k);
 
  }
 
}
 

Izlaz:

 
% javac IntAndDouble.java
% java IntAndDouble
i je 10
x je 2.5
i + x je 12.5
i * x je 25.0
i - x je 7.5
x - i je -7.5
i / x je 4.0
x / i je 0.25%

 

Redoslijed može imati utjecaja na rezultat kad se tipovi podataka miješaju. Na primjer,

1 / 2 * 3.5 = 0.0
3.5 * 1 / 2 = 1.75
3.5 / 2 = 1.75

Kod miješanja tipova podataka, uobièajeni matematièki zakoni komutacije opæenito ne vrijede, posebno ne kad se miješaju cjelobrojne (integer) i realne (floating point) vrijednosti.

1.0 / 2 * 3.5 = 1.75
3.5 * 1.0 / 2 = 1.75
1 / 2.0 * 3.5 = 1.75
3.5 * 1.0 / 2.0 = 1.75


Automatsko dodjeljivanje tipova podataka (casting)

Ako int podijelimo sa int dobijemo int.

Ako double podijelimo sa double dobijemo double.

Ako int podijelimo sa double ili double sa double, dobijemo double jer u sluèaju nejednakosti tipova Java teži dodjeljivanju što šireg tipa kako se sprijeèilo gubljenje informacija.

Pravilo:

·        Ako je bilo koja varijabla u aritmetièkoj binarnoj operaciji (zbrajanje, oduzimanje množenje, dijeljenje, modulo) tipa double onda Java tretira obje vrijednosti kao double.

·        Ako ni jedna nije double, ali je jedna float, Java tretira obje vrijednosti kao float.

·        Ako ni jedna nije ni float ni double, ali je jedna long, Java tretira obje vrijednosti kao long.

·        Konaèno, ako ni jedna nije double, float ni long, Java tretira obje vrijednosti kao int, èak ako u jednadžbi uopæe nema cijelih brojeva.

Dakle, rezultat æe biti double, float, long ili int, ovisno o tipovima argumenata.

U naredbi pridruživanja, dakle ako postoji znak jednakosti, Java usporeðuje tip na lijevoj strani sa konaènim tipom na desnoj strani. Tip na lijevoj strani neæe se promijeniti, ali æe se provjeriti da li vrijednost sa desne strane (double, float, int or long) odgovara tipu na lijevoj strani. Sve se može smjestiti u double. Sve osim double može se smjestiti u float. Svaki cjelobrojni tip može se smjestiti u long, ali float i double ne mogu, dok se sve tipa int, short i byte može smjestiti u int. Ako se desna strana može smjestiti u lijevu, pridruživanje se normalno obavlja.

Pridruživanje vrijednosti tipa long varijablama tipa int ili pak vrijednosti tipa double varijablama tipa float može uzrokovati probleme i kompajler vam takva pridruživanja neæe dopustiti osim ako eksplicitno navedete da želite pretvaranje (casting). Prisilno pretvaranje tipova oznaèava se navoðenjem odgovarajuæeg tipa u okruglim zagradama neposredno prije izraza koji treba pretvoriti. Na primjer,

int i = (int) 9.0/4.0;

Kad se vrijednost pretvara u drugi tip prije pridruživanja, niz operacija se poduzima da bi se desna strana “skratila” na pravu velièinu. Za konverziju izmeðu realnih (floating point) i cijelih brojeva (npr. int ili long), razlomljeni dio se odbacuje (zaokružuje na nulu). To æe proizvesti cijeli broj. Ako je on dovoljno mali da stane u lijevu stranu, pridruživanje je završeno. U suprotnom, ako je prevelik, bit æe mu pridružena najveæa, a ako je premali, najmanja moguæa vrijednost za odgovarajuæi tip.

Valja voditi raèuna o tome da prisilno pretvaranje može uzrokovati pogreške kojima æe biti vrlo teško uæi u trag i zato ovu moguænost treba koristiti s oprezom.


Pretvaranje stringova u brojeve

Prilikom obrade korisnièkog inputa èesto je potrebno neki String pretvoriti u int. To se radi uz pomoæ statièke metode Integer.valueOf(String s) u kombinaciji s (nestatièkom) metodom intValue() koje pripadaju klasi java.lang.Integer. Npr. String "22" pretvorili bismo u int 22 na sljedeæi naèin:

 
int i = Integer.valueOf("22").intValue();
 

S tipovima double, float i long postupamo slièno, koristeæi statièke metode Double.valueOf(String s), Float.valueOf(String s) i Long.valueOf(String s) u kombinaciji s odgovarajuæim metodama doubleValue(), floatValue() i longValue() koje pripadaju, respektivno, klasama java.lang.Double, java.lang.Float i java.lang.Long. String "22" pretvorili bismo u long 22 ovako:

long l = Long.valueOf("22").longValue();

String "22.5" pretvorili bismo u float ili double ovako:

 
double x = Double.valueOf("22.5").doubleValue();
float y = Float.valueOf("22.5").floatValue();
 

Razlièite valueOf() metode relativno su inteligentne i mogu prepoznati znakove plus i minus, eksponente i ostale uobièajene brojèane formate. Meðutim, ako kao argument dobiju nešto potpuno ne-numerièko, npr. "Hello World",  vjerojatno æe izbaciti NumberFormatException. Za sad još niste uèili kako baratati s iznimakama pa u svojim programima izbjegavajte takve situacije.

Preradit æemo sada program E = mc2 tako da o masi u kilogrami