Wrap Tiplar Batafsil

All lectures for UZ purposes
Daraja, Dars
Mavjud

1. Integer klasi

Integerning yaxshi tomoni, bu klass bo'lgani uchun, u fieldlar va methodlarga ega bo'lishi mumkin. Albatta, ularning soni ko'p — bir necha o'nlab. Shuning uchun biz ulardan eng asosiylarini ko'rib chiqamiz.

Integer klassida int tipining maksimal va minimal qiymatlarini saqlovchi ikkita field bor:

Field Ta'rif
Integer.MAX_VALUE
int tipining maksimal qiymati
Integer.MIN_VALUE
int tipining minimal qiymati

Ba'zan int tipining eng kichik yoki eng katta qiymatini o'zgaruvchiga berishni xohlaysiz. Kodingizni tushunarsiz konstantalar bilan to'ldirib tashlamaslik uchun bu juda chiroyli tarzda yozilishi mumkin:

Kod Ta'rif
int min = Integer.MIN_VALUE;
min 0x80000000 ga teng bo'ladi

Integer klassida bir nechta qiziqarli metodlar ham bor, mana ular:

Metodlar Ta'rif
String Integer.toHexString(int)
Raqamning o'n oltilik ko'rinishini qaytaradi
String Integer.toBinaryString(int)
Raqamning ikkilik ko'rinishini qaytaradi
String Integer.toOctalString(int)
Raqamning sakkizlik ko'rinishini qaytaradi
Integer Integer.valueOf(int i)
Berilgan intni Integerga o'rab beradi
Integer Integer.parseInt(String)
Stringdan olingan raqamni qaytaradi

Oldin siz Integer.parseInt() statik metodi bilan tanishgan edingiz. Eslatib o'tamiz, u qanday ishlaydi:

int name = Integer.parseInt(string);

Agar parseInt() methodiga ichida raqam (faqat raqamlar) bo'lgan stringni bersangiz, u bu stringni pars qiladi va unda mavjud bo'lgan raqamni qaytaradi.

Boshqa metodlar ham foydali. Masalan, ba'zilari berilgan raqamni binar, oktal yoki heksadecimal ko'rinishga o'zgartirishi mumkin.



2. Double klasi

Double klassi, umuman olganda, Integer klassiga o'xshash, lekin bu int emas, balki double tipiga o'rama. Unda ham qiziqarli fieldlar va metodlar bor, ularning ba'zilarini ko'rib chiqamiz:

Double klassida olti ta qiziqarli field mavjud:

Field Ta'rif
double Double.NEGATIVE_INFINITY
Manfiy cheksizlik
double Double.POSITIVE_INFINITY
Ijobiy cheksizlik
int Double.MIN_EXPONENT
Eksponentning minimal qiymati (2x)
int Double.MAX_EXPONENT
Eksponentning maksimal qiymati (2x)
double Double.MIN_VALUE
double tipining minimal qiymati
double Double.MAX_VALUE
double tipining maksimal qiymati

Cheksizlik

Agar siz -1.0'ni 0.0'ga bo'lsangiz, manfiy cheksizlikni olasiz, agar 1.0'ni 0.0'ga bo'lsangiz, ijobiy cheksizlikni olasiz. double tipi nafaqat nolga bo'lishi mumkin, balki bunday qiymatlarni ham saqlaydi.

double sonining eksponenti

Eksponent bilan hamma narsa oddiy. double soni ichida mantissa va eksponentdan iborat. Faqat eksponentning qiymati 10x emas, balki 2x. Agar eksponent 1 ga oshsa, sonning oxirgi qiymati ikki barobar ko'payadi.

MIN_EXPONENT == -1024, natijada 2-1024 taxminan 10-308 ga teng bo'ladi.

Double klassida qiziqarli metodlar ham mavjud:

Metodlar Ta'rif
String Double.toHexString(double)
Sonning o'n oltilik vakiling qaytaradi
boolean Double.isInfinite(double)
Berilgan son cheksizlikmi yoki yo'qligini tekshiradi.
boolean Double.isNaN(double)
Berilgan son NaNmi yoki yo'qligini tekshiradi
Double Double.valueOf(double)
Berilgan double'ni Double ga o'rab beradi
Double Double.parseDouble(String)
Stringdan olingan sonni qaytaradi

Qizig'i shundaki, isInfinite() metodi mavjud bo'lib, agar unga berilgan son plus yoki minus cheksizlik bo'lsa trueni qaytaradi.

Xuddi shunday isNaN() metodi ham ishlaydi — unga berilgan son NaNmi yoki yo'qligini tekshiradi: bu o'ziga xos bir konstantadir, noaniqlikni ifodalaydi (Not a Number, Sonalmas).



3. Character klasi

Character klasi, birinchi navbatda, ko'p sonli foydali statik metodlar bilan qiziqarli, ular turli kategoriyalarga tegishli bo'lgan belgilarni tekshiradi.

Misollar

Metodlar Ta'rif
Character.isAlphabetic(int)
Belgi alifbo belgisi ekanligini tekshiradi
Character.isLetter(char)
Belgi harf ekanligini tekshiradi
Character.isDigit(char)
Belgi raqam ekanligini tekshiradi
Character.isSpaceChar(char)
Belgi bo'shliq, qator o'tish belgi yoki paragraf almashtirish belgi ekanligini tekshiradi (kodlar: 12, 13, 14)
Character.isWhitespace(char)
Belgi ajratmalar: bo'shliq, tab va boshqalar ekanligini tekshiradi
Character.isLowerCase(char)
Belgi kichik harflardanmi — kichik harflar?
Character.isUpperCase(char)
Belgi katta harflardanmi — katta harflar?
Character.toLowerCase(char)
Belgi kichik harflarga aylantiriladi
Character.toUpperCase(char)
Belgi katta harflarga aylantiriladi

Bu metodlarning o'ziga xosligi shundaki, ular barcha ma'lum alifbolar bilan ishlaydi: arab raqamlari belgilar raqamlar sifatida aniqlanadi va hokazo.



4. Boolean klasi

Boolean tipi deyarli boolean tipi kabi. Farqlar minimaldir.

Quyida Boolean klassining soddalashtirilgan variantini ko'rsatamiz:

Kod Ta'rif
class Boolean
{
   public static final Boolean TRUE = new Boolean(true);
   public static final Boolean FALSE = new Boolean(false);

   private final boolean value;

   public Boolean(boolean value)
   {
      this.value = value;
   }

   public boolean booleanValue()
   {
      return value;
   }

   public static Boolean valueOf(boolean value)
   {
      return (value ? TRUE : FALSE);
   }
}


Konstantalar: TRUE va FALSE


O'zgaruvchi qiymati

Boolean klassining konstruktori




Metod ichki o'zgaruvchi qiymatini qaytaradi



Bu statik metod true ni TRUEga va false ni FALSEga o'zgartirishni biladi.

Boolean tipida ikkita konstanta (ikkita field) mavjud:

Klassa konstantalari boolean tipi analogi Ta'rif
Boolean.TRUE
true
rost
Boolean.FALSE
false
yolg'on

Ular bilan boolean tipi kabi ishlash mumkin:

Kod Izoh
if (Boolean.TRUE)
{
}
Boolean – bu shart ichida yozilishi mumkin bo'lgan yagona klass
Boolean a = Boolean.TRUE;
boolean b = Boolean.TRUE;
boolean с = true;
Uchta o'zgaruvchi ham true/TRUE ga teng
Boolean a = Boolean.TRUE;
Boolean b = Boolean.TRUE;
if (a == b)
Konstantalar equals bilan va == bilan solishtirilishi mumkin

Bu ham ishlaydi.

Autoboxing bu yerda yaxshi ishlaydi, shuning uchun siz bu tipdan boolean kabi foydalanishingiz mumkin: bu yerda hech qanday yashirin kamchiliklar yo'q.

Qanday yozilgan Qanday ishlaydi
Boolean a = true;
Boolean b = true;
Boolean c = false;
boolean d = a;
Boolean a = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(true);
Boolean c = Boolean.valueOf(false);
boolean d = a.booleanValue();

Va boolean va Boolean tiplari orasidagi solishtirishlar qanday amalga oshiriladi:

boolean a = true;
Boolean b = true; // Boolean.TRUE ga teng bo'ladi
Boolean c = true; // Boolean.TRUE ga teng bo'ladi

a == b; // true (qiymatlar bo'yicha primitivlar sifatida solishtiriladi)
a == c; // true (qiymatlar bo'yicha primitivlar sifatida solishtiriladi)
b == c; // true (havolalar bo'yicha solishtiriladi, lekin ayni obyektga ishora qiladi)

Agar haqiqatan Boolean obyektini mustaqil yaratmoqchi bo'lsangiz, uni aniq yaratishingiz kerak:

boolean a = true;
Boolean b = new Boolean(true); // yangi Boolean obyekt
Boolean c = true; // Boolean.TRUE ga teng bo'ladi

a == b; // true (qiymatlar bo'yicha primitivlar sifatida solishtiriladi)
a == c; // true (qiymatlar bo'yicha primitivlar sifatida solishtiriladi)
b == c; // false (havolalar bo'yicha solishtiriladi, turli obyektlarga ishora qiladi)

Va yana bir misol: Boolean dan if ichida foydalanish:

Kod Izoh
Boolean less = (2 < 3);
if (less)
{
   ...
}
Kompilyatsiya qiladi va ishlaydi

Kompilyatsiya qiladi, lekin ishlamaydi:

Kod Izoh
Boolean less = null;
if (less)
{
   ...
}

Xatolik. Bu qatorda istisno tashlanadi


5. Autoboxingda qiymatlarni kesh qilish

Aniq sonli tip-oralama bilan hayron qoldiruvchi narsalar bor.

Siz allaqachon bilasizki, agar int va Integerni solishtirsangiz, Integer intga aylantiriladi:

Qanday yozilgan Qanday ishlaydi
int a = 5;
Integer b = 5;
if (a == b)
{
   ...
}
int a = 5;
Integer b = Integer.valueOf(5);
if (a == b.intValue())
{
   ...
}

Agar ikkita Integer obyektini bir-biri bilan solishtirsangiz, ular int tipiga aylantirilmaydi:

Kod Ekranda chiqish
Integer a = 500;
Integer b = 500;
int c = 500;

System.out.println(a == b); // havolalar bo'yicha solishtirish
System.out.println(a == c);
System.out.println(b == c);




false
true
true

Garchi a == c va b == c bo'lsa ham, lekin a != b, chunki a va b solishtirilganda havolalar bo'yicha solishtiriladi. Bu, aslida, kutilgan natija.

Syurpriz

Lekin agar biz 500 ni 100 bilan almashtirsak, butunlay boshqacha natijani olamiz:

Kod Ekranda chiqish
Integer a = 100;
Integer b = 100;
int c = 100;

System.out.println(a == b); // havolalar bo'yicha solishtirish
System.out.println(a == c);
System.out.println(b == c);




true
true
true

Buning sababi shundaki, autoboxingda har doim ham yangi Integer obyekt yaratilib bo'lmaydi. -128 dan 127 gacha bo'lgan qiymatlar kesh qilinadi.

Integer klassida yashirin massiv bor, u Integer(-128), Integer(-127), ... Integer(126), Integer(127) obyektlarini saqlaydi

Agar siz Integer x = 128 yozsangiz, autoboxing yangi obyekt yaratadi, agar Integer x = 127 yozsangiz, autoboxing tayyor obyektni keshdan (massivdan) oladi.

Agar Integer obyektini keshdan olmaslikni istasangiz, uni aniq yaratishingiz kerak, ya'ni: Integer x = new Integer(127);

Bunday kesh barcha tip-oralamalarda mavjud: Integer, Long, Byte, Short, Boolean. Boolean tipida esa uning ikkala qiymati TRUE va FALSE konstantalar: asosan ham keshlanadi.


Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION