- sarğı sinifləri nədir;
- primitivlərin avtomatik qablaşdırılması/açılması;
- Integer sinfinin işi, onun metodları və sabitləri.
Primitiv tiplərin sarğı sinifləri
Bildiyiniz kimi, Java-da iki bloka bölünə bilən müxtəlif məlumat növləri var:- primitiv;
- istinad.
- tam ədədlər - bayt, qısa, int, uzun;
- üzən nöqtə nömrələri (real) - float, double;
- məntiqi məlumat növü - boolean;
- xarakter məlumat növü - char.
Primitiv tip | Sinif sarğısı |
---|---|
bayt | bayt |
qısa | Qısa |
int | Tam |
uzun | Uzun |
sal | Sal |
ikiqat | İkiqat |
boolean | Boolean |
char | Xarakter |
Tam ədəd
Integer sinfi int primitiv tipli sarğı sinifidir. Bu sinif int tipli tək bir sahəni ehtiva edir. Sarmalayıcı sinif kimi Integer int-lərlə işləmək üçün müxtəlif üsullar, həmçinin int-i String və String-i int-ə çevirmək üçün bir sıra üsullar təqdim edir. Aşağıda siniflə işləməyin müxtəlif nümunələrinə baxacağıq. Yaradılışdan başlayaq. Ən çox istifadə edilən (və istifadəsi ən asan) aşağıdakı yaratma variantıdır:
Integer a = 3;
Yəni, bu halda Tam dəyişənin inisializasiyası int dəyişəninin işə salınmasına bənzəyir. Bundan əlavə, Tam dəyişən int dəyişəninin dəyəri ilə işə salına bilər:
int i = 5;
Integer x = i;
System.out.println(x); // 5
Yuxarıdakı halda, avtomatik qablaşdırma gizli şəkildə baş verir. Bu barədə aşağıda daha ətraflı danışacağıq. Yuxarıda sadalanan başlatma seçimlərinə əlavə olaraq, konstruktor və yeni açar sözdən istifadə edərək, tam dəyişən digər obyektlər kimi yaradıla bilər:
Integer x = new Integer(25);
System.out.println(x);
Bununla belə, yazmaq və oxumaq daha çox vaxt tələb edir, buna görə də bu seçim ən az yayılmışdır. Siz int dəyişənləri ilə edə biləcəyiniz hər şeyi Tam dəyişənlərlə edə bilərsiniz. Onlar ola bilər:
qatlayın |
|
Çıxar |
|
Çoxalmaq |
|
Bölmək |
|
Artırma |
|
Azaltmaq |
|
Integer a = null;
Integer b = a + 1; // Здесь мы упадем с "Exception in thread "main" java.lang.NullPointerException"
System.out.println(b);
Əksər müqayisə əməliyyatları int primitiv tipində olduğu kimi həyata keçirilir:
Integer a = 1;
Integer b = 2;
System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
Çıxış:
false
false
true
true
İki Tam dəyişənin müqayisəsi əməliyyatı diqqəti çəkir. Buradakı məqam budur ki, Tam bir istinad məlumat növüdür və onun dəyişənləri dəyərlərin (obyektlərin) özlərini deyil, dəyərlərə istinadları saxlayır. Bu faktın təzahürlərini aşağıdakı kod fraqmentinin icrası zamanı müşahidə etmək olar:
Integer a = 1;
Integer b = 1;
Integer c = new Integer(1);
System.out.println(a == b); // true
System.out.println(a == c); // false
Birinci bərabərliyin nəticəsi doğru, ikincisi isə yanlış olacaq. Bu ona görə baş verir ki, birinci halda biz eyni obyektə istinadları saxlayan iki dəyişəni (“a” və “b”) müqayisə edirik. İkinci halda, iki fərqli obyektə istinad edən iki dəyişəni müqayisə edirik ("c" dəyişənini yaratarkən yeni bir obyekt yaratdıq). Başqa bir maraqlı misal verək:
Integer a = 1;
Integer b = 1;
Integer x = 2020;
Integer y = 2020;
System.out.println(a == b); // true
System.out.println(x == y); // false
Gördüyümüz kimi, birinci müqayisənin nəticəsi doğru, ikincinin nəticəsi isə yanlışdır. Bütün bunlar keşləmə ilə bağlıdır. -128 ilə 127 daxil olmaqla bütün tam ədədlər (bu dəyərlər fərdiləşdirilə bilər) yaddaşda saxlanılır. Beləliklə, biz yeni dəyişən yaratdıqda və ona -128 ilə 127 arasında tam dəyər təyin etdikdə, biz yeni obyekt yaratmırıq, əksinə dəyişənə keş yaddaşda artıq yaradılmış obyektə istinad təyin edirik. İndi bu həqiqəti bildiyimiz üçün yuxarıdakı misal o qədər də mistik görünmür. a və b dəyişənləri eyni obyektə - keşdən olan obyektə istinad edir. Və x və y dəyişənlərinin inisializasiyası zamanı biz hər dəfə yeni obyekt yaratdıq və bu dəyişənlər müxtəlif obyektlərə istinadları saxladı. Və bildiyiniz kimi, == operatoru dəyişənlərin dəyərlərini müqayisə edir, istinad dəyişənlərinin dəyərləri isə istinadlardır. İki Tam dəyişən arasında bərabərliyi dəqiq yoxlamaq üçün (nə qədər mənasız səslənsə də) bərabər metoddan istifadə etməlisiniz. Yuxarıdakı nümunəni yenidən yazaq:
Integer a = 1;
Integer b = 1;
Integer x = 2020;
Integer y = 2020;
System.out.println(a.equals(b)); // true
System.out.println(x.equals(y)); // true
Tam ədədin avtomatik qablaşdırılması və açılması
Avtomatik qablaşdırma və qablaşdırma nədir? Yeni Tam dəyişənlər yaratarkən aşağıdakı konstruksiyadan istifadə etdik:Integer a = 2020;
Bu yolla biz yeni açar operatorundan istifadə etmədən yeni obyekt yaratdıq. Bu, primitiv tipli int-in avtomatik qablaşdırma mexanizmi sayəsində mümkündür. Əks prosedur, Tamsaylı istinad dəyişəninin dəyərinə primitiv int dəyişəni təyin edərkən baş verir:
Integer a = 2020;
int x = a;
Bu halda, görünür, biz primitiv dəyişənə istinad təyin etmişik (yəni obyektə istinad “a” dəyişəninin qiymətidir). Amma əslində, avtomatik qablaşdırma mexanizmi sayəsində 2020 dəyəri “x” dəyişəninə yazılmışdır.Avtomatik qablaşdırma/açma Java-da çox yayılmış bir hadisədir. Çox vaxt bu, öz-özünə olur, bəzən hətta proqramçının xəbəri olmadan. Ancaq hələ də bu fenomen haqqında bilmək lazımdır. Javarush haqqında bu mövzuda maraqlı məqaləmiz var .
Tam sinif sabitləri
Integer sinfi tam ədədlərlə işləmək üçün müxtəlif sabitlər və metodlar təqdim edir. Bu bölmədə praktikada onlardan bəzilərini daha yaxından nəzərdən keçirəcəyik. Sabitlərdən başlayaq. Aşağıdakı cədvəl bütün sinif sabitlərini göstərir:Kostanta | Təsvir |
---|---|
ÖLÇÜ | İkirəqəmli say sistemində int tipinin tutduğu bitlərin sayı |
BAYT | İkirəqəmli say sistemində int tipinin tutduğu baytların sayı |
MAX_VALUE | int tipinin saxlaya biləcəyi maksimum dəyər |
MIN_VALUE | int tipinin saxlaya biləcəyi minimum dəyər |
TİP | int növündən Class tipli obyekti qaytarır |
public static void main(String[] args) {
System.out.println(Integer.SIZE);
System.out.println(Integer.BYTES);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.TYPE);
}
Nəticədə aşağıdakı nəticəni alırıq:
32
4
2147483647
-2147483648
int
Integer sinfinin metodları
İndi Integer sinfinin ən çox istifadə olunan metodlarına qısa nəzər salaq. Beləliklə, "yuxarı" olanlara nömrəni sətirdən çevirmək və ya sətri nömrədən çevirmək üsulları başçılıq edir. Bir sətri nömrəyə çevirməklə başlayaq. Bu məqsədlər üçün parseInt metodu istifadə olunur , imza aşağıdadır:-
static int parseInt(String s)
int i = Integer.parseInt("10");
System.out.println(i); // 10
Dönüşüm mümkün deyilsə - məsələn, biz parseInt metoduna sözü ötürdük - NumberFormatException atılacaq. parseInt(String s) metodunun həddən artıq yüklənmiş qardaşı var:
-
static int parseInt(String s, int radix)
System.out.println(Integer.parseInt("0011", 2)); // 3
System.out.println(Integer.parseInt("10", 8)); // 8
System.out.println(Integer.parseInt("F", 16)); // 15
parseInt metodları int primitiv məlumat növünü qaytarır. Bu metodların analoqu var - the valueOf metodu . Bu metodun bəzi variasiyaları sadəcə olaraq daxili olaraq parseInt çağırır. parseInt-dən fərq ondadır ki, valueOf nəticəsi int deyil, Tam ədəd olacaqdır. Bu metodun bütün variantlarını və onun necə işlədiyinə dair bir nümunəni aşağıda nəzərdən keçirək:
- static Integer valueOf(int i) - dəyəri i olan Tam ədədi qaytarır;
- static Integer valueOf(String s) - parseInt(String s) ilə oxşardır, lakin nəticə Tam ədəd olacaq;
- static Integer valueOf(String s, int radix) - parseInt(String s, int radix) ilə oxşardır, lakin nəticə Tam ədəd olacaq.
int a = 5;
Integer x = Integer.valueOf(a);
Integer y = Integer.valueOf("20");
Integer z = Integer.valueOf("20", 8);
System.out.println(x); // 5
System.out.println(y); // 20
System.out.println(z); // 16
Stringi int/Integer-ə çevirməyə imkan verən üsullara baxdıq. Əks prosedur toString metodlarından istifadə etməklə həyata keçirilir . İstənilən Integer obyektində toString metodunu çağırıb onun sətir təsvirini əldə edə bilərsiniz:
Integer x = 5;
System.out.println(x.toString()); // 5
Bununla belə, toString metodunun tez-tez obyektlər üzərində gizli çağırılması səbəbindən (məsələn, obyekt çap üçün konsola göndərilərkən) bu üsul tərtibatçılar tərəfindən nadir hallarda açıq şəkildə istifadə olunur. Həmçinin int parametrini götürən və onu sətir təsvirinə çevirən statik toString metodu da var. Misal üçün:
System.out.println(Integer.toString(5)); // 5
Bununla belə, qeyri-statik toString metodu kimi, statik metoddan açıq şəkildə istifadə etmək nadirdir. Daha maraqlısı 2 tam parametr qəbul edən toString statik metodudur:
- statik String toString(int i, int radix) - i-ni radix say sistemində sətir təsvirinə çevirəcək.
System.out.println(Integer.toString(5, 2)); // 101
Integer sinfində iki ədədin maksimum/minimumunu tapmaq üçün bir neçə üsul var:
- statik int max(int a, int b) ötürülən dəyişənlər arasında ən böyük dəyəri qaytaracaq;
- statik int min(int a, int b) ötürülən dəyişənlər arasında ən kiçik dəyəri qaytaracaq.
int x = 4;
int y = 40;
System.out.println(Integer.max(x,y)); // 40
System.out.println(Integer.min(x,y)); // 4
Nəticə
Bu yazıda Integer sinfinə baxdıq. Bunun hansı sinif olduğunu və sarğı siniflərinin nə olduğunu danışdıq. Biz dərsə praktiki baxımdan baxdıq. Müqayisə əməliyyatları da daxil olmaqla hesab əməliyyatlarının nümunələrinə baxdıq. Biz iki Tam dəyişənin müqayisəsinin incəliklərinə nəzər saldıq və keşlənmiş obyektlər anlayışını araşdırdıq. Primitiv məlumat növlərinin avtomatik qablaşdırılması/açılması fenomenini də qeyd etdik. Bundan əlavə, Integer sinfinin bəzi metodlarına, eləcə də bəzi sabitlərə baxa bildik. Ədədlərin bir say sistemindən digərinə çevrilməsinə dair nümunələr verdilər.Ev tapşırığı
-
Integer sinfinin başqa hansı üsullarının olduğunu öyrənin (onları rəsmi sənədlərlə veb saytında öyrənə bilərsiniz ), tədqiq etdiyiniz metodlardan hansının (məqalədə verilmişlər istisna olmaqla) sizin fikrinizcə daha faydalı olduğunu şərhlərdə yazın ( ən çox istifadə edəcəksiniz). Həm də fikrinizin səbəblərini göstərin.
PS Burada düzgün cavablar yoxdur, lakin bu fəaliyyət sizə sinfi daha yaxşı öyrənməyə imkan verəcək.
-
Materialı birləşdirmək üçün kiçik sadə problemi həll edin.
İki nömrəmiz var:
1100001001 - ikilik say sistemində
33332 - kvinar say sistemindəYalnız Integer sinfinin metodlarından istifadə edərək, verilmiş iki ədəd arasında maksimumu təyin etmək və sonra üçlü say sistemində maksimum və minimum qiymət arasındakı fərqi göstərmək lazımdır.
-
Maksimum mümkün Tam Ədədi səkkizlik say sisteminə çevirin və nəticədə çıxan ədəddəki rəqəmlərin sayını göstərin (rəqəmi proqramla hesablayın).
GO TO FULL VERSION