අද අපි කතා කරන්නෙ සරල topic එකක් ගැන.😌
ඒ තමයි Auto Boxing And Unboxing.📦

👀 ඊට කලින් අපි බලමු මොනවද මේ Java වල තියෙන Data types වර්ග 2 කියල.

1️⃣ Primitive Data Types
Primitive කියන්නෙ සරලම සහ directly, stack memory එකේ store කරන්න පුලුවන් data types.
🧠 Ex:- int, boolean, double, float, .

2️⃣ Non-primitive Data Types
Non-primitive කියන්නෙ objects. ඒ කියන්නෙ stack එකේ store කරන්නෙ reference එක විතරයි.
🔗 Ex:- String, Array, Class (Student, Customer), Interfaces, Collections, Wrapper, …

🤔 ඉහත මම සදහන් කරපු ගොඩක් non-primitive types ඔයාලය පුරුදුයි. ඒ අතරින් අන්තිමට තියෙන Wrapper class ගැන ඔයාල දන්නවද?

📦 Wrapper class කියන්නෙ primitive data type එකේම Object type එක.
සෑම primitive type එකකටම wrapper class එකක් තියෙනවා.
🧾 EX:
int → Integer
double → Double
boolean → Boolean

🧍‍♂️ අපට Integer value එකක් store කරගන්න ඕන අවස්ථාවක int හෝ Integer use කරන්න පුලුවන්.
(Primitive type එකක් වෙනුවට Wrapper class එකක් use කරන්න පුලුවන්)

🙋‍♂️ ඇයි එහෙනම් primitive type තියෙද්දි Wrapper classes කරලියට ආවෙ?

අපට සෑම වැඩක්ම primitive use කරල කරගන්න බැහැ:

1️⃣ Java collections use කරද්දි අපට primitive type use කරන්න බැහැ.
List list = new ArrayList<>(); // ❌ This will not compile
List list = new ArrayList<>(); // ✅ This works

2️⃣ Primitives can’t be null, but wrapper classes can. DB සමඟ ගනුදෙනු කරනකොට null අවශ්‍ය වෙනවා.
Ex:-age එක විදියට primitive int use කලවිට default value එක 0.ඒක ප්‍රශ්නයක්.Wrapper class use කලවිට default null.

3️⃣ Wrapper classes වල utility methods තියෙනවා 🛠️
හිතන්න අපි double value එකක් user input එකක් විදියට ගත්තෙ String විදියට කියල.ඉතින් අපට පුලුවන් Wrapper classes වල තියෙන utility method use කරල ඒක covert කරගන්න.
Ex: Double.parseDouble(“23.5”)

4️⃣ Generics වැඩ කරන්නෙ wrapper classes සමඟ විතරයි (Generics ගැන ඉදිරියේදි කතා කරමු) 👀

✅ හරි දැන් ඔයාලට primitive සහ wrapper classes ගැන idea එකක් තියෙනවනෙ.
📌 දැන් බලමු Auto Boxing සහ Auto Unboxing ගැන.

int x = 10;
Integer y = x;

🤨 ඔයාලට මේ code එක දැක්කම ප්‍රශ්නයක් පේන්නෙ නැද්ද?
x කියන්නෙ primitive type එකක්. y කියන්නෙ Integer type reference variable එකක්.

➡️ එතකොට y ගෙ කොහොමද primitive value එකක් store කරන්නෙ? 🥲
☝️ ඒ තර්කය හරි!
JDK 1.5 වලට කලින් මේක error එකක්.
☑️ නමුත් JDK 1.5 එකෙන් ආපු නව feature එකක් තමයි Autoboxing and Unboxing

🔁 Autoboxing in Java
Autoboxing is the automatic conversion of a primitive type to its corresponding wrapper class object.

🔁 Unboxing in Java
Unboxing is the automatic conversion of a wrapper class object to its
corresponding primitive type.

📌 දැන් ඔයාලට පැහැදිලි ඇතිනෙ primitive ↔️ wrapper class ගැන worry වෙන්නෙ නැතුව ඒව use කරන්න පුලුවන් කියල.

❗හැබැයි Wrapper classes වල limitations තියෙනවා:

int x = 10;
double y = x; // ✅ valid

Integer p = 20;
Double q = p; // ❌ invalid

✋ මේක invalid. හේතුව තමයි Boxing/Unboxing support කරන එක අදාල type pair එකට විතරයි.

🥳 මම හිතනව ඔයාලට Boxing සහ Unboxing තේරෙන්න ඇති කියල.

📚 එහෙනම් අපි හෙටත් අලුත් topic එකකින් හමු වෙමු! 🚀

  • Credits: Rashmitha Kaushalya