Pages

Tuesday, October 7, 2014

Java Part 6 ( casting )

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 එකක්..

ඒ කියන්නෙ,

  • char       16 bit
boolean වල තියාගන්නෙ logic එකක් (true or false) නිසා true කියන එක 1 විදියට ගත්තොත් false එක 0 විදියට ගන්න පුළුවන්. එහෙම වුනොත් 1 හරි 0 හරි තියාගන්න ඕන වෙන්නෙ එක bit එකක් නිසා boolean data type එකේ capacity එක bit 1යි.

  • boolean  1 bit

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 පාදයට හදා ගනිමු..

  • 5    =    101 දෙක
මේකට ගිහින් තියෙන්නෙ 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 එක්ක හමුවෙමු..


69 comments:

  1. කෙනෙක් කියලා තියෙනවා මේක තේරෙන්නෙ නෑ කියලා.. එහෙම තේරෙන්නෙ නැත්නම් ඒ කොතනද කියලා කියන්න එතකොට මට ඒක වෙනස් කරන්න පුළුවන් වෙයි
    ..

    ReplyDelete
    Replies
    1. supirima wedak aiye api gdak exam me oyage vedio balala gda dagana thiyanawa thanks

      Delete
  2. Data type use කරන්නේ කොහොමද කියල ලොකු පැටලැවිල්ලක හිටියෙ දැන් තමා එලටම පැහැදිලි වුනේ

    ReplyDelete
  3. Ela wadak bn

    Machan oya float eke f akura dala karanne casting karana ekada(4,5f;) kiyala thiyenne

    ReplyDelete
    Replies
    1. yep.. eka C language eke indanma ena ekak.. castingma kiyala kiyanna ba hariyatama.. bt eke wena demai wenne..

      Delete
  4. Oyata godak pin brother .....oya me karana de watinakama danene java egena ganna gihin amaruwe watuna kenekta...mata den hodatama therenwa dr..

    ReplyDelete
  5. Wish you all the best for learn more and teach more

    ReplyDelete
  6. godak vatinwa dr...godaaaak pin oyata

    ReplyDelete
  7. This comment has been removed by the author.

    ReplyDelete
  8. ethakota "Strings" kiyanne variable ekak nemeida mcn...?

    ReplyDelete
    Replies
    1. "String " කියන්නේ data type එකක් @දසුන්_සධරුවන් .
      variable එකක් කියන්නේ අපි සාමාන්‍ය ගණිතයේදී x=10 කියල පාවිච්චි කරන එක ගත්තොත් එකේ x කියන්නේ variable එක. මං හිතනවා මං මේ දුන්න උත්තරය තේරෙන්න ඇති කියල . මේ මදි නම් zilw__@outlook.com මේකට mail එකක් දාන්න .

      Delete
    2. string kiynne primitive data type ekk neme,
      variable kiynne vichallyak neh? ithn apita String kiyana non-primitive data type eka use karagena ram eke kotasak wen karagnna puluwan

      Ex- String c="java";

      mn hithnawa mekath hari athi kiyla

      Delete
  9. great work bro!!!!
    keep it up!

    ReplyDelete
  10. good work!thank you verymuch.keep it up

    ReplyDelete
  11. SUPRI AIYE ,OYAATA SUBA PATHANAWA ,DIGATAMA KARANNA

    ReplyDelete
  12. ගොඩක් වටිනවා අය්යේ, good luck.

    ReplyDelete
  13. aiye suppa wedak exam gdak doda gye oyage me vedio balala

    ReplyDelete
  14. ara f akura daan kyn eka terun giya madida manda........
    eka java wala tynaw d?????

    ReplyDelete
    Replies
    1. oya kynne
      double d= 4.5 kyn eka apit float walin gnn oni nn
      float f = 4.5f kyn ekia
      float f1 = (float) 4.5 kyn ekai dekama hari kyna eka need????

      Delete
    2. mehemai. Java wala floating point number ekak store karana default data type eka 'double'. ethakota othanadi float f = 4.5 kiyala dunnoth error ekak enawa. mokada 4.5 kiyana eka store wenne double ekak widihata nisa(default double ne). 64bit ekak 32bit ekaka store karaddi error ekak enawa kiyala dannawane. eka nisa thamai ,4.5 kiyna eka double neme float kiyala kiyannai 4.5f kiyala danne ethanadi.

      Delete
  15. ai apita casting kiyana eka awashya wenne?dn oya udaaharanen gatthoth apita convert karanne nathuwa kelinma ' byte x = 5 ' kiyala denna puluwan ne?ai me wage concept ekak hadunwala thiyenne?java wla,eka wena dekata use wenwada?

    ReplyDelete
  16. Supiri wadak bro...

    ReplyDelete
  17. Ane pin aiye oyata!!! Meka baluwama thama therenna gatte...nattan melo deyak therenne nathuwa pissu hadila hitye..aiye Ethakota string kiyana data type eka use karanne ai api? Ara java wala data type 8 ta eka aithi nathida?

    ReplyDelete
  18. String kiyna eka ai data type 8 ta athuath krala naththe

    ReplyDelete
  19. Mchn 1st ynx krnna oni me karana wadeta.
    Antimata dala tyna puc eke code eke values danne natuwa variable name eken dala example eka dunnanm tawa tikak clear kyla hitenawa, mokada mata etanin poddk confuse wenawa bn

    ReplyDelete
  20. Great work aiye. Thank you very much...!!!

    ReplyDelete
  21. Supiri wadak. Digatama karagena yann ayye

    ReplyDelete
  22. Gdrk try kara meka therum ganna dennm clear.. thankz karana support ekata oyta

    ReplyDelete
  23. Me blog ek harima watinawa ayyee...thank you.

    ReplyDelete
  24. ayye thank you very much.
    marama supiriyata pahadilie.
    wam molakarayo youtube channel eken dakala awe. marama watinawa

    ReplyDelete
  25. Thank you very much

    ReplyDelete
  26. anith subject waltath me wagema tikk thibbnm marma watinawa, computer organisation, requirement engineering, software process wage ...

    ReplyDelete
  27. thank you so much ❤️

    ReplyDelete
  28. සුපිරි 👍🏻❤️හොදට තේරුණා. Thank you🥺❤️

    ReplyDelete

Contact Form

Name

Email *

Message *