CodeGym /Kurslar /JAVA 25 SELF /Java-da wrapper sinifləri

Java-da wrapper sinifləri

JAVA 25 SELF
Səviyyə , Dərs
Mövcuddur

1. Giriş

Java dilində iki müxtəlif məlumat ailəsi mövcuddur. Birincisi — primitiv tiplər: int, char, double, boolean və digərləri. Onlar sadə və sürətlidir: dəyər birbaşa yaddaş hüceyrəsində saxlanılır. İkinci ailə — bu, istinad tipləridir, yəni obyektlər: dəyişən obyektin yaddaşda yerləşdiyi yerə istinadı saxlayır.

Bəzən primitivi obyekt kimi istifadə etmək lazım gəlir. Lakin primitivlər əvvəlcədən obyekt deyil. Belə hallarda xüsusi wrapper sinifləri kömək edir.

Wrapper tipləri — daxilində primitivin dəyərini saxlayan və onunla obyekt kimi davranmağa imkan verən siniflərdir. Məsələn, int üçün — Integer sinfi, double üçün — Double, char üçün — Character, boolean üçün — Boolean. Bu siniflər belə metodlar təqdim edir: Integer.parseInt(), Double.isInfinite(), Character.isLetter(), Boolean.parseBoolean() və s.

Integer obyektinin int primitivindən alınması nümunəsi:

// Primitiv
int a = 10;

// Wrapper obyekt
Integer b = Integer.valueOf(10);

a dəyişənində 10 ədədinin özü saxlanılır. b dəyişəni isə daxilində 10 saxlayan obyektə istinadı saxlayır.

2. Wrapper-lər nə üçün lazımdır

Primitiv — həmişə konkret dəyərdir, onu null-a bərabər etmək olmur. Obyekt isə mövcud olmaya və boş dəyər saxlaya bilər — bu, “naməlum” və ya “mövcud deyil” halını göstərmək lazım olduqda rahatdır.

Primitivin metodları yoxdur. Ədəddə x.toString() kimi bir şey çağırmaq olmaz. Wrapper belə imkanlar verir: Integer.parseInt("123") sətiri ədədə çevirir, həmçinin ədədi toString() vasitəsilə sətirə çevirmək olar.

Nəticə: wrapper-lər məhz obyekt tələb olunan yerlərdə lazımdır — null-u saxlamaq imkanı, metodları çağırmaq, yalnız obyektləri qəbul edən API-lərə dəyərləri ötürmək (məsələn, List<Integer> tipli kolleksiyalar).

Wrapper tiplərinin tam siyahısı

Primitiv tip Wrapper sinfi
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

3. Boxing və unboxing

Wrapper obyektini əl ilə yaratdıqda, primitivi götürüb onu obyektin içinə “paketləyirsiniz”:

int primitive = 42;
Integer wrapper = Integer.valueOf(primitive); // paketləmə

Primitiv dəyəri geri çıxarmaq — “paketdən çıxarmaq” — üçün, məsələn, intValue() istifadə olunur:

Integer wrapper = Integer.valueOf(42);
int primitive = wrapper.intValue(); // paketdən çıxarma

Avtoboksinq (Autoboxing)

Əgər primitiv dəyəri wrapper dəyişəninə mənimsədirsinizsə, kompilyator özü valueOf() çağırışını əlavə edəcək:

int a = 10;
Integer b = a; // avtoboksinq (Integer.valueOf(a))

Avtounboksinq (Unboxing)

Əks vəziyyət — wrapper obyektinin primitiv lazım olan yerdə istifadə olunması:

Integer c = 20;
int d = c; // avtounboksinq (c.intValue())

int a = 10; // primitiv
Integer b = a; // avtoboksinq
Integer c = Integer.valueOf(20);
int d = c; // avtounboksinq
Avtoboksinq və avtounboksinq

4. Gizli tələlər

Wrapper-lərin müqayisəsi. Obyektlər üçün == operatoru istinadları, dəyərləri deyil, müqayisə edir:

Integer m = 200;
Integer n = 200;
System.out.println(m == n); // false, çünki bunlar fərqli obyektlərdir

Java rəqəmlərin wrapper-lərini -128-dən 127-yədək diapazonda keşləyir, ona görə də bəzən == true qaytaracaq, bəzən isə — false. Dəyərləri müqayisə etmək üçün həmişə equals() istifadə edin:

Integer x = 100;
Integer y = 100;
System.out.println(x == y);      // true, keşə düşdü
System.out.println(x.equals(y)); // true, dəyər üzrə müqayisə

Avtounboksinq zamanı NullPointerException. Wrapper null-dırsa və siz onu açmağa çalışsanız — istisna alacaqsınız:

Integer value = null;
int primitive = value; // Səhv! NullPointerException

Performans və yaddaş. Wrapper-lər primitivlərdən daha yavaşdır və daha çox yaddaş tutur. Kiritik hissələrdə və böyük ədəd massivləri ilə işləyərkən primitivləri seçin.

5. Nümunələr

Integer və Double ilə iş nümunələri

Sətri ədədə çevirmə:

String text = "123";
int number = Integer.parseInt(text);
System.out.println(number); // 123

Həqiqi ədədlərin xüsusi dəyərlərini yoxlama:

double d = 1.0 / 0;
System.out.println(Double.isInfinite(d)); // true

double nan = 0.0 / 0.0;
System.out.println(Double.isNaN(nan)); // true

Character ilə iş nümunələri

char bir simvol saxlayır; Character wrapper-i rahat yoxlamalar verir:

char ch = 'A';
Character wrapper = ch; // avtoboksinq

System.out.println(Character.isLetter(ch)); // true
System.out.println(Character.isDigit(ch));  // false
System.out.println(Character.toLowerCase(ch)); // 'a'

Boolean ilə iş nümunələri

Primitiv boolean — yalnız true/false-dur. Boolean wrapper-i isə əlavə olaraq null saxlamağa imkan verir:

Boolean flag = null; // icazəlidir
flag = Boolean.TRUE; // xüsusi sabit

System.out.println(flag); // true

Sətirləri məntiqi dəyərlərə çevirmə:

String s1 = "true";
String s2 = "false";
boolean b1 = Boolean.parseBoolean(s1);
boolean b2 = Boolean.parseBoolean(s2);

System.out.println(b1); // true
System.out.println(b2); // false
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Oyuncunun xallarının qeydiyyatı 🎮
Oyuncunun xallarının qeydiyyatı 🎮
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Rəqəm daxil etməsinin yoxlanması 🔢
Rəqəm daxil etməsinin yoxlanması 🔢
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Məhsul qiymətlərinin rəqəmsal səbətə ötürülməsi 🛒
Məhsul qiymətlərinin rəqəmsal səbətə ötürülməsi 🛒
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Zədələnmiş məlumatların emalı 📉
Zədələnmiş məlumatların emalı 📉
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION