Junior
როგორ გადააქცევდით მიმთითებელ ტიპებს პრიმიტიულებსა და პირიქით?
sobes.tech AI
პასუხი AI-სგან
საკავშირო ტიპებისთვის (მაგალითად, Integer, Double, Boolean) primitive ტიპებს (int, double, boolean) გამოიყენება ავტო-უნboxing. JVM ავტომატურად გარდაქმნის საკავშირო ტიპს მის primitive თანაფარდობას საჭიროების შემთხვევაში:
// Primitive ტიპი
int primitiveInt = 10;
// საკავშირო ტიპის შექმნა primitive-დან (auto-boxing)
Integer objectInt = primitiveInt; // ავტომატური გარდაქმნა `int`-დან `Integer`
// საკავშირო ტიპის გარდაქმნა primitive-ად (auto-unboxing)
int newPrimitiveInt = objectInt; // ავტომატური გარდაქმნა `Integer`-დან `int`
Primitive ტიპებიდან საკავშირო ტიპებზე გადასვლა (auto-boxing) ხდება JVM-ის მიერ ავტომატურად, სადაც ის ქმნის ობიექტს primitive მნიშვნელობიდან:
// Primitive ტიპი
double primitiveDouble = 3.14;
// საკავშირო ტიპის შექმნა primitive-დან (auto-boxing)
Double objectDouble = primitiveDouble; // ავტომატური გარდაქმნა `double`-დან `Double`
// საკავშირო ტიპის გარდაქმნა primitive-ად (auto-unboxing)
double newPrimitiveDouble = objectDouble; // ავტომატური გარდაქმნა `Double`-დან `double`
მნიშვნელოვანია, რომ საკავშირო ტიპიდან primitive-ად გარდაქმნის დროს (unboxing) შეიძლება გამოიწვიოს NullPointerException, თუ საკავშირო ტიპს აქვს null მნიშვნელობა:
ასე რომ, ავტო-პაკოირება/უნპაკოირება მნიშვნელოვნად გამარტივდა:
// დეტალური გარდაქმნა ავტო-პაკოირების/უნპაკოირებისამდე
Integer explicitInteger = new Integer(25); // მოძველებული კონსტრუქტორი
int explicitInt = explicitInteger.intValue(); // `intValue()` მეთოდის გამოყენება
// სტატიკური მეთოდის `valueOf()` გამოყენება (პრეფერერებული)
Integer valueOfInteger = Integer.valueOf(50);
int valueOfInt = valueOfInteger.intValue();