Oldingi maqolalarda aytib o‘tganimdek, Java dasturlash tili tiplarga katta e’tibor beradi va har bir o‘zgaruvchi albatta biror tipga oid bo‘lishi shart. Tiplar haqida yozib o‘tdim va tushunarli bo‘ldi degan umiddaman. Tushunarli bo‘lgan bo‘lsa, bu tiplarni bir-biriga o‘zgartirish imkonini ko‘rib chiqamiz, misol uchun «double» tipiga «int» tipiga oid o‘zgaruvchi qiymatini berish mumkin. Bu degani, tezkor xotiradan 8 bayt ajratilgan «double» tipiga, 4 bayt ajratilgan «int» tipi qiymatini berish mumkin. Nazariy tushuntirdim, endi java kodlari orqali ko‘rsataman.

O‘zgartirishni quyidagi usullar orqali amalga oshirish mumkin.

Avtomat o‘zgartirgich.

class test{
public static void main(String args[]) {
int num;
num=200;
double rez;
rez=num;
System.out.println (rez);
}
}

Bu o‘zgartirgich avtomat o‘zgartirish hisoblanadi. Dastlab, klass ichida «int«tipidagi, «num» nomli o‘zgaruvchi yaratdik va bu o‘zgaruvchiga «200» qiymatini berdik. Undan so‘ng, «double» tipida «rez» nomli o‘zgaruvchi yaratib, unga «int» tipidagi «num» nomli o‘zgaruvchini qiymatini berdik. Bunda avtomat o‘zgartirish amalga oshirildi va quiydagi natijani oldik.

change_1

Natijadan ko‘rinib turibdiki, 200 soni 200.0 ko‘rinishiga kelib qoldi. Endi bu qiymat «double» tipiga o‘zgartirildi va haqiqiy songa aylandi.

Bu  avtomat o‘zgartirishni, har doim ham ishlatib bo‘lmaydi. Ishlatish uchun quyidagi qoidalarga rioya qilish lozim:

o‘zgartiriluvchi tip uzunligi, o‘zgargan tip uzunligidan kichik bo‘lishi lozim;

tiplar bir-biriga mos kelishi kerak.

Tip uzunligi deganda, oraliq qiymat tushuniladi, misol uchun, «double» tipi qabul qiladigan qiymatlar «int» tipi qabul qiladigan qiymatlardan katta, shuning uchun avtomat almashtirish mumkin, lekin teskarisi mumkin emas. Chunki, tezkor xotiradan ajratiladigan joy kichik bo‘lib, katta hajmdagi qiymatlarni qabul qila olmaydi.

Tiplarning bir-biriga mos kelish, tushunarli, barcha sonlar bir biri bilan mos keladi(haqiqiy va butun), lekin sonlar «char«, «boolean» tiplari bilan mos kelmaydi, shuning uchun avtomat o‘zgartirib bo‘lmaydi.

Qo‘l yordamida o‘zgartirish.

Har doim ham avtomat o‘zgartirishdan foydalanib bo‘lmaydi, juda hohlasangiz ham. Misol uchun, «int» tipini «short» tipiga almashtirish kerak, buni avtomat o‘zgartirib bo‘lmaydi, chunki «int» tipi «short» tipidan katta. Agar avtomat o‘zgartiraman desangiz, xatolik haqida xabar o‘qiysiz.

class test{
public static void main(String args[]) {
int num;
num=200;
short rez;
rez=num;
System.out.println (rez);
}
}

Natijani ko‘rsangiz, » Uncompilable source code — possible loss of precision» nomli xatoni ko‘rasiz va kodda ham buni sezish mumkin, hattoki qiymat «short» tipiga sig‘sa ham.

change_2

Qoida aniq, hamma uchun bir hil, oraliq qiymat kichikmi, avtomat o‘zgarmaydi,kompilyator qarab o‘tirmaydi sig‘adimi yo‘qmi.

Bunday holatda o‘zgartirishni qo‘lda(kod yordamida) amalga oshiramiz. Buning uchun yuqoridagi kodni biroz o‘zgartiramiz, ya’ni aniq ko‘rsatamiz, nimani nimaga almashtirish kerakligini.

class test{
public static void main(String args[]) {
int num;
num=200;
short rez;
rez=(short)num;
System.out.println (rez);
}
}

Ko‘rib turganingizdek, bitta qator o‘zgartirildi, ya’ni «rez=(short)num;» operator qo‘shildi. Shu tariqa chiqayotgan xatolikdan qutuldik. Aniq etmoqdamiz, «rez» o‘zgaruvchiga, «num» o‘zgaruvchi qiymatini «short» tipiga o‘zgartirib chiqar.

Bu almashtirishni ishlatib, biroz xavfliroq hisoblanadi, agar biz «short» diopozinidan katta qiymatni olsak(misol uchun 60000), biz kutgan natija chiqmaydi, eng yomoni xatolik ham bermaydi.

change_3

Natija, -5536. Xo‘sh bu natija qayerdan chiqdi. «short» tipi -32768 dan 32767 gachadir. Bu diopozonda umumiy raqamlar qancha:32768+32767+0 soni =65536. Biz kiritgan sondan, umumiy qiymatni olib tashlaymiz: 60000-65536=-5536. Hammasi tushunarli bo‘ldi deb o‘ylayman.

Bu natija biz uchun juda yomon(undan ko‘ra xatolik bersa yaxshi bo‘lardi), natija chiqdi deb keyingi amallarga o‘tib ketilsa, oxirida noto‘g‘ri qiymat olamiz va xatoni topish biroz qiyin bo‘ladi.

Agar, xaqiqiy sonlarni, butun songa o‘zgartirmoqchi bo‘lsangiz, u holda ham yuqoridagi o‘zgartirishdan foydalanasiz. Bunda xaqiqiy sonning kasr qismi tashlab yuboriladi va butun qismi butun tipli o‘zgaruvchiga beriladi.

change_4

Agar diapazonga sig‘masa, yuqoridagi holat yuz beradi va chalkashlik yuz beradi.