Java Casting
ඔන්න එහෙනම් අද අපි java casting ගැන ඉගෙන ගන්න යන්නෙ.. ඊට කලින් කවුරු හරි java වල variable ගැනයි data type ගැනයි බැලුවෙ නැත්නම්
මෙතනින් ගිහිල්ලා ඒ ටික බලලම එන්නකො..
කෙලින්ම වැඩේට බහිමු. casting කියන්නෙ මොකක්ද කියලා කතා කරන්න කලින් අපිට casting ඕන වෙන්නෙ මොකටද කියලා බලලා හිටියොත් හොඳයි කියලා මට හිතෙනවා.. හැබැයි casting අවශ්ය වෙන්නෙ මොකටද කියලා දැන ගන්න කලින් java වල තියෙන data type වල capacity එක පොඩ්ඩක් බලා ගත්තොත් කට පාඩම් කරන්නෙ නැතුව casting ගැන හොඳටම තේරුම් ගන්න පුළුවන් වෙයි කියලා හිතෙන නිසා මම java වල තියෙන data types වල capacity එක මුලින් කියලා ඉන්නම්..
දැන් එහෙනම් කට්ටිය පොඩ්ඩක් මතක් කරන්න බලන්න java වල තියෙන data type 8 මොනවද කියලා......
Variable Capacity
data type 8 තමයි,
- byte
- short
- int
- long
- float
- double
- char
- boolean
හරි ගොඩක් අය දන්නවනේ byte වල capacity එක, ඒ කියන්නෙ bit ගාන 8යි කියලා.. දැන් එතන ඉඳන් බලමු. integer data type 4 දි bit ගාන 8න් පටන් අරගෙන 2න් ගුණ වෙවී තමයි යන්නෙ..
ඒ කියන්නෙ,
- byte 8 bit
- short 16 bit
- int 32 bit
- long 64 bit
ඊළඟට තියෙන floating point data type 2 දි integer data type 4න් අන්තිම දෙකේ තියෙන bit ගාන තමයි තියෙන්නෙ..
ඒ කියන්නෙ,
- float 32 bit
- double 64 bit
char වල තියෙන්නෙ short වලට සමාන capacity එකක්..
ඒ කියන්නෙ,
boolean වල තියාගන්නෙ logic එකක් (true or false) නිසා true කියන එක 1 විදියට ගත්තොත් false එක 0 විදියට ගන්න පුළුවන්. එහෙම වුනොත් 1 හරි 0 හරි තියාගන්න ඕන වෙන්නෙ එක bit එකක් නිසා boolean data type එකේ capacity එක bit 1යි.
variable වල bit size එකත් කියපු නිසා මට හිතෙනවා දැන් මෙහෙම එකම type එකේ data දාන්න data type ගොඩක් තියෙන්නෙ ඇයි කියලත් කියලම ඉන්න..
ඇත්තටම අපි මොකක් හරි program එකක්, software එකක් හදන්නෙ අපේ computer එකේ run වෙන්න විතරක් නෙවෙයිනේ.. ඒක නිසා ඒක use කරන user ගෙ machine එකෙත් වැඩ කරන්න ඕන. හැබැයි අපි දන්නෙ නෑ user ගෙ machine එකේ ram එක ලොකු අගයක්ද පොඩි එකක්ද කියලා. ඒක නිසා අපි කෝකටත් කියලා හදන program එකක ram usage එක අඩු වෙන්න හදන්න ඕන..
variable එකක් කියන්නෙ ram එකෙන් වෙන් කරන ඉඩ ප්රමාණයක් නිසා අපි ram එක ඉතුරු කර ගන්න නම් variable හදද්දි අවශ්ය ප්රමාණයටම විතරක් ඉඩ වෙන් කරගන්න ඕන..
උදාහරණයක් විදියට අපි 5 කියන value එක ram එකේ store කරනවා කියලා හිතමුකො.. machine එකේ data save වෙන්නෙ binary විදියට නිසා අපි මුලින්ම මේක 2 පාදයට හදා ගනිමු..
මේකට ගිහින් තියෙන්නෙ bit 3යි නේ.. ඉතින් අපි මේ value එක int එකකට දාන්න ගියොත් නිකරුනේ අපි bit 32ක් ram එකේ වෙන් කරලා ඒකෙන් 29 ක්ම use කරන්නෙත් නැතුව තියාගෙන ඉන්නවා. ඇත්තටම මේක අපිට bit 8 කට දැම්මනම් අපරාදෙ වුනත් වෙන්නෙ bit 5ක් නිසා int එකකට නොදා byte එකකට දානකොට ram එකේ ඉඩ ඉතුරු වෙනවා..
අන්න එහෙම අවශ්ය විදියට manage කරගෙන data දාන්න තමයි එකම type එකෙන් වුනත් වෙනස් bit size වලින් data type කිහිපයක්ම java වලදි අපිට දීලා තියෙන්නෙ..
Casting
මෙහෙම හිතන්නකෝ.. int variable එකක 5 කියන value එක තියෙනවා.. එතකොට ram එකේ ඉඩ වැඩිපුර යන නිසා අපිට ඒක byte variable එකකට දාන්න ඕන නිසා අපි මෙහෙම ලිවුවොත් හරිද?
අපිට කරන්න ඕන දේ නම් මෙතනදි කරලා තියෙන්නෙ.. හැබැයි compiler මෙහෙම කරන්න ගියාම error එකක් දෙනවා. ඒකට හේතුව තමයි අපි දන්නවා වුනාට 5 කියන value එකට යන්නෙ bit 3ක් විතරක් වුනාට දැන් ඇත්තටම 5 කියන value එක තියෙන්නෙ int variable එකක නිසා ඒක තියෙන්නෙ bit 32 ක පැකට් එකක් විදියට ඉතින් එහෙම bit 32ක් bit 8කට දාන්න බැරි නිසා තමයි මෙහෙම කරන්න ගියාම compiler අපිට error එකක් දෙන්නෙත්..
දැන් අපි කොහොමහරි 5 කියන value එකට අදාළ bit ටික විතරක් වෙන් කරලා ගත්තොත් අපිට byte variable එකකට ඒක දාන්න පුළුවන් වෙනවා නේද?
අන්න එහෙම ලොකු bit ටිකකින් data එකට අදාළ පොඩි bit ප්රමාණයක් වෙන් කරගන්න ක්රියාවට තමයි casting කියලා කියන්නෙ.. ( සරලව කිව්වොත් එක data type එකක් තව data type එකකට හරවන ක්රයාවලිය casting කියලා හඳුන්වන්න පුළුවන්.. )
දැන් අපි බලමු එහෙනම් cast කරලා කොහොමද මේ int variable එකේ තියෙන value එක byte variable එකකට දාගන්නෙ කියලා..
How?
මෙහෙම හිතමුකො...
අපි byte variable එකක තියෙන value එකක් int variable එකකට දාන්න ගියොත් ප්රශ්නයක් වෙනවද? ඇත්තටම bit 8ක packet එකක් ගේමක් නැතුව bit 32 කට දාන්න පුළුවන් නිසා ප්රශ්නයක් වෙන්නෙ නෑ.. හැබැයි අනිත් පැත්ත කරන්න ගියාම තමයි අපිට කලින් කතා කරපු ප්රශ්නෙ එන්නෙ..
ඒක නිසා ලොකු එකක් පොඩි එකකට දාන්න යනකොට අපිට compiler ට විශේෂයෙන්ම කියන්න වෙනවා එයාගෙන් අදාළ ටික විතරක් කඩලා ගන්න කියලා. එහෙම කියන්න නම් අපිට කරන්න තියෙන්නෙ වරහන් ඇතුලෙ cast කරන්න ඕන type එක ලියන එක විතරයි..
තේරුනේ නෑ නේද? උදාහරණයක් අරගෙනම බලමුකො..
අපිට integer variable එකේ තියෙන 5 කියන value එකට අදාළ data එක තියෙන bit 8ක් කඩලා අරගෙන byte variable එකකට දාන්න ඕන නිසා අපි byte variable එකට int variable එක assign කරන්න කලින් වරහන් ඇතුලෙ byte කියලා දාන්න යන variable එකේ data type එක දීලා compiler ට කියනවා මේ x කියන int variable එකෙන් byte වලට අදාළ bit 8 කඩලා b කියන byte variable එකට දාන්න කියලා.. එතකොට casting වෙලා ඒ value එක byte variable එකට වැටෙනවා..
මෙන්න මෙහෙම තමයි casting කරන්නෙ.. මෙතන int එකකින් byte එකකට දාන එක ගැන විතරක් කතා කළාට variable capacity මතක නම් ඕනම data type එකක casting මේ විදියටම කරන්න පුළුවන්..
Note
- මේක විශේෂම දෙයක්, හොඳට මතක තියාගන්න java වලදි INTEGER operation එකක් වුනාට පස්සෙ processor එකෙන් ඒ output එක එවන්නෙ 32 bit විදියට. එතකොට එහෙම එන result එකක් දාන්න පුළුවන් int එකකට හරි long එකකට හරි විතරයි. byte වලට හරි short වලට හරි දාන්න ඕනනම් cast කරන්න වෙනවා..
- FLOATING POINT operation එකක් වුනාට පස්සෙ processor එකෙන් result එක දෙන්නෙ 64 bit විදියට. ඒක නිසා එහෙම එන result එකක් දාන්න පුළුවන් double වලට විතරයි. අපිට float වලට දාන්න ඕනනම් (float) කියලා ලියලා cast කරන්න වෙනවා..
- එහෙමත් නැත්නම් අපි මේ දාන්න යන්නෙ float variable එකකට කියලා compiler ට කියන්න f අකුරක් value එකේ අගට දාන්න වෙනවා..
එහෙනම් casting ගැන හැමෝටම තේරුණා කියලා හිතනවා.. වෙලාවෙ ප්රශ්නෙත් එක්ක මට මේ සැරේ එක දිගටම post එක ලියන්න බැරි වුනා. වෙලාව තියෙන තියෙන විදියට ටික ටික ලිව්වෙ. ඒක නිසා මේකෙ ගලා යාමක් නෑ වගෙත් දැනෙනවා.. කොහොම වුනත් කාට හරි තේරෙන්නෙ නැත්නම් අනිවාර්යෙන්ම අහන්න.. එහෙනම් මම අදට සමුගන්නම්.. ඊළඟ දවසෙ අපි IF-Else එක්ක හමුවෙමු..