[ miljannet @ 09.02.2014. 18:07 ] @
Ucim iz knjige literale i dosta su me zbunili, trazio sam i po netu, pregledo sam i ovaj link : http://docs.oracle.com/javase/...va/nutsandbolts/datatypes.html
Ali sve sto pise na tom linku ima i knjizi, tj veci deo toga.

1) Celobrojni literali.

Kad procitam deo o celobrojnim literalima kaze da se svaki taj celobrojni literal, tj celobrojna vrednost mogu napisati pomocu dekadnog, oktalnog, heksadecimalnog i od JDK 7 i u binarnom.
Kazu da se ispred oktalnih vrednosti pise 0, ispred heksadecimalnih se pise x ili X (0x ili 0X), za binarni b (0b ili 0B). <- sve do sada razumem

Onda Celobrojni literali porizvode vrednost tipa int. Kada zelimo da dodelimo vrednost celobrojnog literala int celobrojnom literalu byte ili short kaze da se greska nece pojaviti ukoliko se ta vrednost nalazi u opsegu.
Da li to znaci da ako je vrednost literala int 89 i ako tu vrednost literala ocemo da dodelimo celobrojnom literalu byte nece biti greske jer byte ima vrednost od -128 do 127 ? A ako je vrednost literala int veca od dozvoljenje vrednosti byte koristimo konverziju tipova ? Tako sam ja razumeo ovaj deo.

Ovaj deo me muci, citiram:

"Medjutim, da biste zadali literal tipa long, morate eksplicitno saopstiti prevodiocu da je vrednost literal tipa long.
To cinite tako sto literalu na kraju dodajete malo ili veliko L na primer brojevi 0x7fffffffffffffff ili 9223372036854775807L
predstavljaju najduze literale tipa long. Celobrojna vrednost moze se dodeliti i promenljivoj tipa char pod uslovo da se nalazi u odgovarajucem opsegu" Ovaj deo mi nije ni malo jasan i skroz sam zbunjen, cak ni ne znam sta uopste literal znaci.
Mada ja sam to nekako shvatio da je svaki taj literal tipa int u pocetku ako ga zelimo dodeliti tipu byte i short koji su nizi od tipa
int onda radimo ono sto sam gore napisao, a ako zelimo da ga dodelimo tipu long stavljamo na kraju L ? Da li neko moze da mi da
neki primer ovoga da mi bude jasnije ?

Onda postoje ovde jos Literali za brojeve u pokretnom zarezu, logicki literali i literali za pojedinacne znakove koje tek nista ne razumem i nisu mi nimalo jasni, da li neko ima neku literaturu gde je ovo dobro objasnjeno na srpskom ili engleskom ?

Iskreno ovo me skroz zbunilo i mnogo sam se izgubio pa ako bi neko bio ljubazan da izdvoji makar 10 minuta i da mi malo objasni ovo ? Trazio sam i na onom sajtu iznad i opet nista ne razumem. Hvala unapred.
[ jablan @ 09.02.2014. 19:18 ] @
Iako je pitanje opširno, ja baš nisam skapirao šta tačno tebi nije jasno. Literali su "neposredne" vrednosti, tj. brojevi, karakteri, stringovi ili true/false vrednosti (ako se ne varam). Kad u sorsu otkucaš broj 123 ili string "pera", to su literali.

E sad, kod brojeva ti tim sufiksom L možeš da naglasiš da je u pitanju long (mada nisam siguran u kojim je tačno situacijama to i neophodno, možda da bi se izbegla neka implicitna konverzija).
[ miljannet @ 09.02.2014. 21:13 ] @
Hvala ti Jablane, da li moze neko nesto vise da mi kaze o njima ili neki link da mi postavi ?
[ jablan @ 10.02.2014. 09:02 ] @
Pa link koji si ostavio je prilično dobar:

Citat:
A literal is the source code representation of a fixed value; literals are represented directly in your code without requiring computation.


"Literal predstavlja fiksnu vrednost u izvornom kodu; literali su iskazani direktno u vašem kodu bez potrebe za izračunavanjem."

Šta te konkretno interesuje, literali postoje u bukvalno svakom programskom jeziku?
[ blekmor @ 10.02.2014. 19:39 ] @
Nemoj ovo mnogo da te buni. Uglavnom početnici ne skontaju ovu priču, nego to dodje samo od sebe vremenom.
Literal je vrijednost koja je zakucana u kodu, a ne u promenljivoj. Kada napišeš
Code:
int n = 100;

ovde je literal --- 100. Kasnije kada budeš koristio n, to nije literal nego promenljiva.
Kada pričamo o "numeric literals", oni su "po difoltu" tipa int u dekadnom sistemu. Sve ostlao moraš da naglasiš. Long ima veći opseg od int. Long se sastoji od 64bita, dok je int 32bitni. Kompajler za sve što vidi u kodu mora da zauzme mjesto u memoriji, i pokušava da ne troši više memorije nego što treba. Stoga ako napišeš 5+9223372036854775807, kompajler treba prebaci ove dvije vrijednosti u memoriju računara, pa da ih onda sabere. On će da zauzme dvije lokacije za broj, pošto nije drugačije rečeno on će zauzeti memoriju za dva int-a. Kada gurne ova dva broja u tu memoriju doći će do greške jer drugi broj ne može da stane u obezbjedjeni prostor. Ako bi drugom broju napisao L na kraju, kompajler bi znao da je tip long i da treba više memorije. Isto tako, kada napišeš .0 na kraju nekog broja, on automatski zna da radi sa decimalnim brojevima a ne sa integerima, te pravi odgovarajuće akcije. Tip char nije ništa drugo nego 16 bitni broj. Char je tu, manje-više, samo da bi programi bili čitljiviji. Java koristi UNICODE kripciju. Da li ti je jasno zašto sada tipu char možeš dodjeliti literal 120?
Čitava priča sa tipovima brojeva se svodi na memoriju, te je besmisleno od početnika tražiti da zna bilo šta više o tome.
Da li će kompajler da prijavi grešku ili će greška da se pojavi tek kad pokreneš program? To provjeri sam :)
Ovo što sam napisao ne podrazumjevaj da se sve dešava tačno tako i tačno tim redoslijednom koji sam ja naveo, ali to je poenta... :) Izuči malo konverziju tipova, ovo će ti onda biti jasnije.
Nemoj da se sikiraš oko toga, to će ti sve biti jasno vremenom.
Generalno se u javi ne prave programi koji nešto računaju, te često java programi i nemaju neku aritmetiku, čak neki nemaju ni brojeve (osim brojača u petljama i nekih dimenzija).