JavaRush /Блоги Java /Random-TG /Пӯшидан, кушодан ва бастабандӣ кардан

Пӯшидан, кушодан ва бастабандӣ кардан

Дар гурӯҳ нашр шудааст
Салом! Шумо аллакай бо навъҳои ибтидоӣ ошно ҳастед ва бо онҳо бисёр кор кардаед. Пӯшидан, кушодан ва бастабандӣ - 1Примитивҳо дар барномасозӣ ва махсусан дар Java, бартариҳои зиёд доранд: онҳо хотираи камро ишғол мекунанд ва ба ин васила самаранокии барномаро зиёд мекунанд ва ба диапазони арзишҳо ба таври возеҳ тақсим мешаванд. Аммо, дар раванди омӯзиши Java, мо на як бор такрор кардем, ба мисли мантра, " дар Java ҳама чиз an object аст ." Аммо ибтидоӣ радди мустақими ин калимаҳост. Онҳо an object нестанд. Пас, принсипи «ҳама чиз an object аст» дурӯғ аст? На дарвоқеъ. Дар Java, ҳар як навъи ибтидоӣ бародари дугоники худро дорад, синфи печанда ( Wrapper). бастабандӣ чист? Папеч як синфи махсусест, ки арзиши ибтидоиро дар дохor худ нигоҳ медорад. Аммо азбаски ин синф аст, он метавонад мисолҳои худро эҷод кунад. Онҳо арзишҳои ибтидоии заруриро дар дохor он нигоҳ медоранд, дар ҳоле ки an objectҳои воқеӣ мебошанд. Номҳои синфҳои печанда ба номҳои ибтидоии мувофиқ хеле монанданд ё бо онҳо комилан мувофиқанд. Аз ин рӯ, ба ёд овардани онҳо хеле осон хоҳад буд.
Синфҳои Wrapper барои намудҳои маълумоти ибтидоӣ
Намудҳои маълумоти ибтидоӣ Синфҳои бастабандӣ
int Бутун
кӯтоҳ Кӯтоҳ
дароз дароз
byte Байт
шино кардан шино кардан
дучанд Дучандон
char Характер
булӣ Булӣ
Объектҳои синфи Wrapper мисли ҳама гуна дигар сохта мешаванд:
public static void main(String[] args) {

   Integer i = new Integer(682);

   Double d = new Double(2.33);

   Boolean b = new Boolean(false);
}
Синфҳои бастабандӣ ба шумо имкон медиҳанд, ки нуқсонҳои навъҳои ибтидоиро кам кунед. Аз ҳама равшантар он аст, ки ибтидоӣ усулҳо надоранд . Масалан, онҳо метод надоранд toString(), бинобар ин шумо наметавонед, масалан, рақамро intба сатр табдил диҳед. Аммо бо синфи бастабандӣ Integerин осон аст.
public static void main(String[] args) {

   Integer i = new Integer(432);

   String s = i.toString();
}
Бо тағирёбии баръакс низ мушкилот вуҷуд хоҳад дошт. Фарз мекунем, ки мо сатр дорем, ки мо аниқ медонем, ки рақамро дар бар мегирад. Аммо, дар мавриди навъи ибтидоӣ, intмо ин ададро аз сатр гирифта наметавонем ва онро, воқеан, ба адад табдил диҳем. Аммо ба шарофати дарсҳои бастабандӣ, мо ҳоло ин имконият дорем.
public static void main(String[] args) {

   String s = "1166628";

   Integer i = Integer.parseInt(s);

   System.out.println(i);
}
Натиҷа: 1166628 Мо рақамро аз сатр бомуваффақият дарёфт кардем ва онро ба тағирёбандаи истинод таъин кардем Integer i. Дар омади гап, дар бораи пайвандҳо. Шумо аллакай медонед, ки параметрҳо ба усулҳо бо роҳҳои гуногун интиқол дода мешаванд: ибтидоӣ аз рӯи арзиш ва an objectҳо бо истинод интиқол дода мешаванд. Шумо метавонед ин донишро ҳангоми сохтани усулҳои худ истифода баред: агар усули шумо, масалан, бо рақамҳои касрӣ кор кунад, аммо ба шумо мантиқи интиқол бо истинод лозим аст, шумо метавонед ба Double/Floatҷои double/float. Илова бар ин, ба ғайр аз усулҳо, синфҳои печанда дорои майдонҳои статикӣ мебошанд, ки барои истифода хеле қулай мебошанд. Масалан, тасаввур кунед, ки шумо ҳоло бо вазифае рӯ ба рӯ мешавед: шумораи максималии имконпазирро дар консол чоп кунед intва сипас шумораи ҳадди ақали имконпазирро чоп кунед. Чунин ба назар мерасад, ки вазифа оддӣ аст, аммо ба ҳар ҳол, шумо онро бе Google иҷро карда наметавонед. Ва синфҳои бастабандӣ ба шумо имкон медиҳанд, ки "мушкилоти ҳамарӯза" -и зеринро ҳал кунед:
public class Main {
   public static void main(String[] args) {

       System.out.println(Integer.MAX_VALUE);
       System.out.println(Integer.MIN_VALUE);
   }
}
Чунин майдонҳо ба шумо имкон медиҳанд, ки аз корҳои ҷиддӣ парешон нашавед. Ногуфта намонад, ки дар ҷараёни чопи рақами 2147483647 (ин маҳз MAX_VALUE аст) нодуруст навиштани он тааҷҷубовар нест :) Илова бар ин, дар яке аз лексияҳои қаблӣ мо аллакай диққатро ба он ҷалб карда будем, ки an objectҳои синфҳои печонидашуда. тағйирнопазиранд .
public static void main(String[] args) {

   Integer a = new Integer(0);
   Integer b = new Integer(0);

   b = a;
   a = 1;
   System.out.println(b);
}
Натиҷа: 0 Объекте, ки истинод аввал ба он ишора карда буд, аҳолати худро тағир надодааст, вагарна арзиш bниз тағир меёфт. Тавре ки бо String, ба ҷои тағир додани ҳолати an objectи печанда, дар хотира an objectи комилан нав сохта мешавад. Чаро офарандагони Java дар ниҳоят тасмим гирифтанд, ки намудҳои ибтидоиро дар забон нигоҳ доранд? Азбаски ҳама чиз бояд an object бошад ва мо аллакай синфҳои печанда дорем, ки онҳоро барои ифодаи ҳама чизҳои ибтидоӣ истифода бурдан мумкин аст, чаро онҳоро танҳо дар забон гузоред ва ибтидоиро нест кунед? Ҷавоб оддӣ аст - иҷроиш. Навъҳои ибтидоиро ибтидоӣ меноманд, зеро онҳо аз бисёр хусусиятҳои «вазнин»-и an objectҳо маҳруманд. Бале, an object дорои усулҳои зиёди мувофиқ аст, аммо шумо на ҳамеша ба онҳо ниёз доред. Баъзан ба шумо танҳо рақами 33 ё 2.62 ё арзиши true/ лозим аст false. Дар ҳолатҳое, ки ҳама бартариҳои an objectҳо номувофиқанд ва барои кор кардани барнома лозим нестанд, примитивҳо кори беҳтареро иҷро мекунанд.

Бастабандии худкор/худкушоии худкор

Яке аз хусусиятҳои примитивҳо ва синфҳои печонидани онҳо дар Java autoboxing/autounboxing мебошад.Биёед Пӯшидан, кушодан ва бастабандӣ - 2 ин мафҳумро дарк кунем. Тавре ки шумо ва ман қаблан фаҳмидем, Java забони ба an object нигаронидашуда мебошад. Ин маънои онро дорад, ки ҳама барномаҳои дар Java навишташуда аз an objectҳо иборатанд. Примитивҳо an object нестанд. Аммо, ба тағирёбандаи синфи печанда метавонад арзиши навъи ибтидоӣ таъин карда шавад. Ин раванд autoboxing номида мешавад . Ба ҳамин тариқ, ба тағирёбандаи навъи ибтидоӣ метавонад ба an objectи синфи печанда таъин карда шавад. Ин раванд autounboxing номида мешавад . Барои намуна:
public class Main {
   public static void main(String[] args) {
       int x = 7;
       Integer y = 111;
       x = y; // auto unpacking
       y = x * 123; // autopacking
   }
}
Дар сатри 5 мо ба ибтидоии x арзиши y -ро таъин мекунем, ки an objectи синфи печанда мебошад Integer. Тавре ки шумо мебинед, барои ин ягон амали иловагӣ лозим нест: компилятор инро медонад intва Integerдар асл ҳамон чизест . Ин ба таври худкор кушодан аст. Ҳамин чиз бо autoboxing дар сатри 6 рӯй медиҳад: an objectи y ба осонӣ арзиши ибтидоӣ таъин карда мешавад (x*123). Ин як мисоли бастабандии автоматӣ мебошад. Ин аст, ки калимаи "авто" илова карда шудааст: барои таъин кардани истинодҳои ибтидоӣ ба an objectҳои синфҳои сарпӯши онҳо (ва баръакс) ба шумо ҳеҷ кор кардан лозим нест, ҳама чиз ба таври худкор сурат мегирад . Қулай, дуруст? :) Боз як қулайии хеле бузурги автоматӣ/автоматӣ кушодан дар кори усулҳо зоҳир мешавад. Гап дар он аст, ки параметрҳои усул инчунин ба худкорбандӣ ва худкушӣ дучор мешаванд . Ва, масалан, агар яке аз онҳо ду an objectро ҳамчун вуруд қабул кунад Integer, мо метавонем ба осонӣ ибтидоии оддиро дар он ҷо гузаронем int!
public class Main {
   public static void main(String[] args) {

       printNumber(7);//regular int, even without a variable
   }

   public static void printNumber(Integer i) {
       System.out.println("You entered a number" + i);
   }
}
Натиҷа: Шумо рақами 7-ро ворид кардед. Он баръакс кор мекунад:
public class Main {
   public static void main(String[] args) {

       printNumber(new Integer(632));
   }

   public static void printNumber(int i) {
       System.out.println("You entered a number" + i);
   }
}
Як нуктаи муҳиме, ки бояд дар хотир дошт: autoboxing ва unboxing барои массивҳо кор намекунад !
public class Main {
   public static void main(String[] args) {

       int[] i = {1,2,3,4,5};

       printArray(i);//error, won't compile!
   }

   public static void printArray(Integer[] arr) {
       System.out.println(Arrays.toString(arr));
   }
}
Кӯшиши интиқоли массиви ибтидоӣ ба усуле, ки массиви an objectҳоро ҳамчун вуруд қабул мекунад, боиси хатогии компиляция мегардад. Дар охир, биёед бори дигар ба таври мухтасар примитивҳо ва печонидани Примитивҳоро муқоиса кунем:
  • афзалияти иҷроиш доранд
Сарпӯшҳо:
  • Онҳо ба шумо имкон медиҳанд, ки принсипи "ҳама чиз an object аст" -ро вайрон накунед, то рақамҳо, рамзҳо ва арзишҳои мантиқии ҳақиқӣ/дурӯғ аз ин мафҳум берун нашаванд.
  • Қобorяти кор бо ин арзишҳоро тавассути пешниҳоди усулҳо ва майдонҳои мувофиқ васеъ кунед
  • Зарур аст, вақте ки ягон усул метавонад танҳо бо an objectҳо кор кунад
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION