JavaRush /Java блогы /Random-KK /Орау, орау және орау

Орау, орау және орау

Топта жарияланған
Сәлеметсіз бе! Сіз қарабайыр түрлермен жақсы таныссыз және олармен көп жұмыс істедіңіз. Орау, орау және орау - 1Бағдарламалаудағы примитивтердің, атап айтқанда Java тілінің көптеген артықшылықтары бар: олар аз жадты алады, осылайша бағдарламаның тиімділігін арттырады және мәндер ауқымдарына анық бөлінеді. Дегенмен, Java тілін үйрену барысында біз мантра сияқты « Java-да бәрі an object болып табылады » деп бірнеше рет қайталадық. Бірақ примитивтер бұл сөздерді тікелей теріске шығарады. Олар an objectілер емес. Сонда «барлығы an object» қағидасы жалған ма? Онша емес. Java тілінде әрбір қарабайыр типтің егіз ағасы, орауыш класы ( Wrapper) бар. Қаптама дегеніміз не? Қаптама - бұл қарабайырдың мәнін өз ішінде сақтайтын арнайы класс. Бірақ бұл класс болғандықтан, ол өз даналарын жасай алады. Олар нақты an objectілер бола отырып, қажетті қарабайыр құндылықтарды ішінде сақтайды. Орауыш кластарының атаулары сәйкес примитивтердің атауларына өте ұқсас немесе олармен толығымен сәйкес келеді. Сондықтан оларды есте сақтау өте оңай болады.
Қарапайым деректер түрлеріне арналған орауыш сыныптары
Қарапайым деректер түрлері Қаптама кластары
int бүтін сан
қысқа Қысқа
ұзақ Ұзақ
byte Байт
жүзу Қалқымалы
қос Қосарлы
таңба Кейіпкер
логикалық Логикалық
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. Айтпақшы, сілтемелер туралы. Параметрлер әдістерге әртүрлі жолдармен берілетінін бұрыннан білесіз: примитивтер мән бойынша, ал нысандар сілтеме арқылы беріледі. Сіз бұл білімді әдістерді құру кезінде пайдалана аласыз: егер сіздің әдісіңіз, мысалы, бөлшек сандармен жұмыс істейтін болса, бірақ сілтеме бойынша өту логикасы қажет болса, параметрді әдіске 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, орауыш нысанының күйін өзгертудің орнына жадта мүлдем жаңа нысан жасалады. Неліктен Java жасаушылар ақырында тілдегі қарабайыр типтерді сақтауды шешті? Барлығы an object болуы керек және бізде примитивтер білдіретін барлық нәрсені білдіру үшін қолдануға болатын орауыш сыныптары бар болғандықтан, неге оларды тілде қалдырып, примитивтерді алып тастамасқа? Жауап қарапайым - өнімділік. Қарапайым типтер қарабайыр деп аталады, өйткені оларда an objectілердің көптеген «ауыр» белгілері жоқ. Иә, нысанда көптеген ыңғайлы әдістер бар, бірақ олар әрқашан қажет емес. trueКейде сізге 33 саны немесе 2,62 немесе / мәні қажет болады false. Нысандардың барлық артықшылықтары маңызды емес және бағдарламаның жұмыс істеуі үшін қажет емес жағдайларда, примитивтер әлдеқайда жақсы жұмыс істейді.

Автоматты орау/автоматты түрде орау

Java тіліндегі примитивтер мен олардың орауыш кластарының ерекшеліктерінің бірі автобокс/автобоксинг болып табылады.Бұл Орау, орау және орау - 2 ұғымды түсінейік. Сіз бен біз бұрын білгеніміздей, Java - an objectіге бағытталған тіл. Бұл Java тілінде жазылған барлық бағдарламалар an objectілерден тұратынын білдіреді. Примитивтер an object емес. Дегенмен, орауыш класының айнымалы мәніне қарабайыр түрдің мәні тағайындалуы мүмкін. Бұл процесс автобокс деп аталады . Дәл осылай қарабайыр түрдегі айнымалыға орауыш класының 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шын мәнінде бірдей нәрсе . Бұл автоматты түрде орамнан шығару. Дәл осындай жағдай 6-жолдағы автобокспен де орын алады: y нысанына қарабайырлардың мәні оңай тағайындалады (x*123). Бұл автоматты буып-түюдің мысалы. Сондықтан «авто» сөзі қосылды: олардың орауыш сыныптарының 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);
   }
}
Есте сақтау керек маңызды мәселе: автобокс пен қораптан шығару массивтер үшін жұмыс істемейді !
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ілермен жұмыс істей алатын кезде қажет
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION