JavaRush /Java блогу /Random-KY /Java Integer Class Guide

Java Integer Class Guide

Группада жарыяланган
Бул макалада Integer классы жөнүндө сүйлөшөбүз. Келгиле, бул суроолорду карап көрөлү:
  • орогуч класстар деген эмне;
  • примитивдерди автопакеттештирүү/ачуу;
  • Integer классынын иштеши, анын ыкмалары жана константалары.
Java бүтүн класстын окуу куралы - 1

Примитивдүү типтердин орогуч класстары

Белгилүү болгондой, Java эки блокко бөлүүгө болот ар кандай маалымат түрлөрү бар:
  • примитивдүү;
  • шилтеме.
Javaда бир нече примитивдүү маалымат түрлөрү бар:
  • бүтүн сандар - byte, кыска, int, узун;
  • калкыма чекиттүү сандар (чыныгы) - калкыма, кош;
  • логикалык маалымат түрү - логикалык;
  • тамга маалымат түрү - char.
Ар бир примитивдүү берorштер түрү өзүнүн таңгыч классына ээ. Алгачкы кичинекей бир тууганын Java an objectисине ороп алган маалымдама маалымат түрү. Төмөндө примитивдүү маалымат түрлөрү жана аларга тиешелүү орогуч класстары:
Примитивдик түрү Каптоочу класс
byte Байт
кыска Кыска
int бүтүн сан
узун Long
сүзүү Float
кош Double
логикалык логикалык
char Каарман
Практикалык мааниде примитивдер жана алардын орогуч класстары көп окшоштуктарга ээ. Көпчүлүк операциялар бирдей аткарылат. Бирок, орогуч класстары примитивдерге мүнөздүү болбогон бир катар мүнөздөмөлөргө ээ. Биринчиден, класстар бар: орогуч класстар менен иштөөдө биз an objectтер менен иштейбиз. Экинчиден (биринчи пункттан кийинки бардык нерсе), бул an objectтер нөл болушу мүмкүн. Үчүнчүдөн, орогуч класстары белгилүү бир маалымат түрү менен иштөөнү жеңилдеткен бир катар константаларды жана ыкмаларды берет. Бул макалада Integer классы менен иштөөнү кененирээк карап чыгабыз.

The Integer

Integer классы - инт примитив түрүндөгү орогуч класс. Бул класс int түрүндөгү бир талааны камтыйт. Ороо классы катары Integer int менен иштөөнүн ар кандай ыкмаларын, ошондой эле intти Stringге жана Stringди intке которуунун бир катар ыкмаларын камсыз кылат. Төмөндө биз класс менен иштөөнүн ар кандай мисалдарын карап чыгабыз. Жаратуудан баштайлы. Эң көп колдонулган (жана колдонууга оңой) төмөнкү түзүү варианты:
Integer a = 3;
Башкача айтканда, бул учурда Integer өзгөрмөнүн инициализациясы int өзгөрмөнүн инициализациясына окшош. Мындан тышкары, Integer өзгөрмөсүн int өзгөрмөнүн мааниси менен инициализациялоого болот:
int i = 5;
Integer x = i;
System.out.println(x); // 5
Жогорудагы учурда, автопакинг кыйыр түрдө ишке ашат. Бул тууралуу төмөндө кененирээк сүйлөшөбүз. Жогоруда саналган инициализация варианттарынан тышкары, бүтүн өзгөрмө конструктор жана new ачкыч сөздү колдонуп, башка an objectтер сыяктуу түзүлүшү мүмкүн:
Integer x = new Integer(25);
System.out.println(x);
Бирок, жазуу жана окуу үчүн көбүрөөк убакыт талап кылынат, ошондуктан бул параметр эң аз таралган. Сиз бүтүн өзгөрмөлөр менен баарын жасай аласыз, аны int өзгөрмөлөрү менен жасай аласыз. Алар болушу мүмкүн:
Бүктөө

Integer a = 6;
Integer b = 2;
Integer c = a + b;
System.out.println(c); // 8
Кемитүү

Integer a = 6;
Integer b = 2;
Integer c = a - b;
System.out.println(c); // 4
Көбөйт

Integer a = 6;
Integer b = 2;
Integer c = a * b;
System.out.println(c); // 12
Бөлүү

Integer a = 6;
Integer b = 2;
Integer c = a / b;
System.out.println(c); // 3
Көбөйтүү

Integer a = 6;
a++;
++a;
System.out.println(a); // 8
Азайтуу

Integer a = 6;
a--;
--a;
System.out.println(a); // 4
Бирок, мунун баары менен, сиз этият болушуңуз керек жана Integer маалымдама маалымат түрү экенин унутпашыңыз керек жана бул түрдөгү өзгөрмө нөл болушу мүмкүн. Бул учурда (эгер өзгөрмө нөл болсо), арифметикалык операциялардан (жана нөл жакшы көрсөткүчтү билдирбеген башка бардык) баш тартуу жакшы. Бул жерде бир мисал:
Integer a = null;
Integer b = a + 1; // Здесь мы упадем с "Exception in thread "main" java.lang.NullPointerException"
System.out.println(b);
Көпчүлүк салыштыруу операциялары int примитивдүү түрүндөгүдөй эле ишке ашырылат:
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);
Чыгуу:

false
false
true
true
Эки бүтүн өзгөрмөлөрдү салыштыруу операциясы өзгөчөлөнүп турат. Жана бул жерде негизги нерсе Integer - бул маалымдама маалымат түрү жана анын өзгөрмөлөрү баалуулуктардын өздөрүнө (an objectтерге) эмес, баалуулуктарга шилтемелерди сактайт. Бул фактынын көрүнүштөрүн төмөнкү code фрагментин аткарууда байкоого болот:
Integer a = 1;
Integer b = 1;
Integer c = new Integer(1);

System.out.println(a == b); // true
System.out.println(a == c); // false
Биринчи теңдиктин жыйынтыгы туура, экинчиси жалган болот. Бул биринчи учурда биз бир эле an objectке шилтемелерди сактаган эки өзгөрмөлөрдү ("a" жана "b") салыштыргандыктан болот. Ал эми экинчи учурда, биз эки башка an objectке тиешелүү эки өзгөрмөлөрдү салыштырабыз ("c" өзгөрмөсүн түзүүдө биз жаңы an object түздүк). Дагы бир кызыктуу мисал келтирели:
Integer a = 1;
Integer b = 1;

Integer x = 2020;
Integer y = 2020;

System.out.println(a == b); // true
System.out.println(x == y); // false
Көрүнүп тургандай, биринчи салыштыруунун жыйынтыгы туура, экинчисинин жыйынтыгы жалган. Мунун баары кэшке байланыштуу. -128ден 127ге чейинки диапазондогу бардык бүтүн сандар (бул маанилерди ыңгайлаштырса болот) кэште сакталат. Ошентип, биз жаңы өзгөрмө түзүп, ага -128 жана 127 ортосундагы бүтүн санды ыйгарганда, биз жаңы an object түзбөйбүз, тескерисинче, өзгөрмөгө кэште мурунтан эле түзүлгөн an objectке шилтеме ыйгарабыз. Эми бул чындыкты бorп туруп, жогорудагы мисал анчалык мистикалык көрүнбөйт. a жана b өзгөрмөлөрү бир эле an objectке - кэштеги an objectке тиешелүү. Жана x жана y өзгөрмөлөрүн инициализациялоодо, биз ар бир жолу жаңы an object түздүк жана бул өзгөрмөлөр ар кандай an objectтерге шилтемелерди сактайт. Белгилүү болгондой, == оператору өзгөрмөлөрдүн маанилерин салыштырат, ал эми шилтеме өзгөрмөлөрдүн маанилери шилтемелер болуп саналат. Эки бүтүн өзгөрмөнүн ортосундагы теңчorкти так текшерүү үчүн, барабар ыкмасын колдонушуңуз керек (бул канчалык маанисиз угулбасын). Жогорудагы мисалды кайра жазалы:
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

Autopacking жана Unpacking Integer

Автоматтык таңгактоо жана таңгактан чыгаруу деген эмне? Жаңы бүтүн өзгөрмөлөрдү түзүүдө биз төмөнкү конструкцияны колдондук:
Integer a = 2020;
Ошентип, биз жаңы негизги операторду колдонбостон жаңы an object түздүк. Бул примитивдүү түрдөгү int автопакинг механизминин аркасында мүмкүн. Тескери proceduresа Integer шилтеме өзгөрмөнүн маанисине примитивдүү int өзгөрмөсүн ыйгаруу учурунда пайда болот:
Integer a = 2020;
int x = a;
Бул учурда, биз примитивдик өзгөрмөгө шилтеме берген окшойбуз (атап айтканда, an objectке шилтеме "a" өзгөрмөнүн мааниси). Бирок, чындыгында, автоматтык таңгактан чыгаруу механизминин аркасында 2020 мааниси “x” өзгөрмөсүнө жазылган. Автоматтык таңгактоо/пакеттен чыгаруу Java-да өтө кеңири таралган көрүнүш. Көбүнчө ал өзүнөн өзү болот, кээде программист билбестен да болот. Бирок сиз дагы эле бул көрүнүш жөнүндө бorшиңиз керек. Бул тема боюнча бизде Javarush боюнча кызыктуу макала бар .

Бүтүн класстын константалары

Integer классы бүтүн сандар менен иштөө үчүн ар кандай константаларды жана методдорду камсыз кылат. Бул бөлүмдө биз алардын айрымдарын иш жүзүндө карап чыгабыз. Туруктуулардан баштайлы. Төмөнкү table бардык класстын константаларын көрсөтөт:
Костанта Description
SIZE int түрү ээлеген эки орундуу санауу системасындагы биттердин саны
БАЙТ int түрү ээлеген эки орундуу санауу системасындагы byteтардын саны
MAX_VALUE int түрү кармай турган максималдуу маани
MIN_VALUE int түрү кармай турган минималдуу маани
TYPE int түрүнөн Class түрүндөгү an objectти кайтарат
Төмөнкү codeду иштетүү менен бардык бул константалардын маанилерин карап көрөлү:
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);
}
Натыйжада, биз төмөнкү натыйжаларды алабыз:

32
4
2147483647
-2147483648
int

Integer классынын методдору

Эми Integer классынын эң көп колдонулган ыкмаларын кыскача карап чыгалы. Ошентип, "жогорку" дегендердин башында саптан санды өзгөртүү же сапты сандан айландыруу ыкмалары турат. Келгиле, сапты санга айландыруу менен баштайлы. Бул максаттар үчүн parseInt ыкмасы колдонулат , кол төмөндө:
  • 
    static int parseInt(String s)
Бул ыкма Stringди intке айлантат. Келгиле, бул ыкма кантип иштээрин көрсөтөлү:
int i = Integer.parseInt("10");
System.out.println(i); // 10
Эгерде конвертациялоо мүмкүн болбосо — мисалы, биз parseInt ыкмасына сөздү өткөрдүк — NumberFormatException ыргытылат. parseInt(String s) методунун ашыкча жүктөлгөн бир тууганы бар:
  • 
    static int parseInt(String s, int radix)
Бул ыкма s параметрин intге айлантат. Radix параметри s ичиндеги сандын кайсы санауу системасында жазылгандыгын көрсөтүп турат, аны intке айландыруу керек. Төмөндө мисалдар:
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 ыкмалары примитивдүү маалымат түрүн кайтарат int. Бул ыкмалардын аналогу бар - the valueOf ыкмасы . Бул ыкманын кээ бир вариациялары жөн гана parseInt деп аталат. parseIntтен айырмасы, valueOf натыйжасы int эмес, бүтүн сан болот. Төмөндө бул ыкманын бардык варианттарын жана анын кантип иштешинин мисалын карап көрөлү:
  • static Integer valueOf(int i) - мааниси i болгон бүтүн санды кайтарат;
  • static Integer valueOf(String s) - parseInt(String s) окшош, бирок натыйжа Integer болот;
  • static Integer valueOf(String s, int radix) - parseInt(String s, int radix) окшош, бирок натыйжа бүтүн сан болот.
Мисалдар:
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
Биз Stringди int/Integerге которууга мүмкүндүк берген ыкмаларды карап чыктык. Тескери proceduresа toString ыкмаларын колдонуу менен ишке ашат . Сиз каалаган Integer an objectисинде toString ыкмасын чакырып, анын сап көрүнүшүн ала аласыз:
Integer x = 5;
System.out.println(x.toString()); // 5
Бирок, toString ыкмасы көбүнчө an objectтерде кыйыр түрдө чакырылгандыктан (мисалы, an objectти басып чыгаруу үчүн консолго жөнөтүүдө) бул ыкманы иштеп чыгуучулар сейрек колдонушат. toString статикалык ыкмасы дагы бар, ал int параметрин алып, аны сап көрсөтүүгө айлантат. Мисалы:
System.out.println(Integer.toString(5)); // 5
Бирок, статикалык эмес toString ыкмасы сыяктуу эле, статикалык ыкманы колдонуу сейрек кездешет. Кызыгы, 2 бүтүн параметрди алган toString статикалык ыкмасы:
  • static String toString(int i, int radix) - iди радикс сан системасындагы сап көрсөтүүгө айлантат.
Мисал:
System.out.println(Integer.toString(5, 2)); // 101
Integer классында эки сандын максималдуу/минималдуусун табуу үчүн бир нече ыкма бар:
  • static int max(int ​​a, int b) өтүп кеткен өзгөрмөлөрдүн эң чоң маанисин кайтарат;
  • static int min(int a, int b) өтүп кеткен өзгөрмөлөрдүн эң кичине маанисин кайтарат.
Мисалдар:
int x = 4;
int y = 40;

System.out.println(Integer.max(x,y)); // 40
System.out.println(Integer.min(x,y)); // 4

Корутунду

Бул макалада биз Integer классын карадык. Бул кандай класс, кандай орогуч класстар жөнүндө сүйлөштүк. Биз класска практикалык көз караштан карадык. Биз арифметикалык операциялардын мисалдарын, анын ичинде салыштыруу операцияларын карап чыктык. Биз эки бүтүн өзгөрмөлөрдү салыштыруунун татаалдыктарын карап чыктык жана кэштелген an objectтердин түшүнүгүн карап чыктык. Биз ошондой эле примитивдүү маалымат түрлөрүн автоматтык таңгактоо/ачуу феноменин айттык. Мындан тышкары, биз Integer классынын кээ бир ыкмаларын, ошондой эле кээ бир константаларды карап чыгууга жетиштик. Алар сандарды бир сан системасынан экинчисине которуунун мисалдарын келтиришти.

Үй тапшырма

  1. Integer классынын дагы кандай ыкмалары бар экенин изилдеңиз (аларды расмий documentациясы бар веб-сайттан окусаңыз болот ), сиз изилдеген ыкмалардын кайсынысы (макалада берилгендерди кошпогондо) сиздин оюңузча эң пайдалуу экенин комментарийге жазыңыз ( сиз тарабынан көбүнчө колдонулат). Жана ошондой эле өз пикириңиздин себептерин келтириңиз.

    PS Бул жерде туура жооптор жок, бирок бул иш классты жакшыраак изилдөөгө мүмкүндүк берет.

  2. Материалды консолидациялоо үчүн кичинекей жөнөкөй маселени чечиңиз.

    Бизде эки номер бар:

    1100001001 - экorк санауу системасында
    33332 - квинардык сан системасында

    Integer классынын методдорун гана колдонуп, берилген эки сандын максимумун аныктап, андан кийин үчтүк сан системасында максималдуу жана минималдуу маанилердин айырмасын көрсөтүү зарыл.

  3. Мүмкүн болгон бүтүн сандын максималдуу маанисин сегиздик сан системасына айлантыңыз жана алынган сандагы цифралардын санын көрсөтүңүз (санды программалык түрдө санаңыз).

Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION