Sobes.tech
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();