- орогуч класстар деген эмне;
- примитивдерди автопакеттештирүү/ачуу;
- Integer классынын иштеши, анын ыкмалары жана константалары.
Примитивдүү типтердин орогуч класстары
Белгилүү болгондой, Java эки блокко бөлүүгө болот ар кандай маалымат түрлөрү бар:- примитивдүү;
- шилтеме.
- бүтүн сандар - byte, кыска, int, узун;
- калкыма чекиттүү сандар (чыныгы) - калкыма, кош;
- логикалык маалымат түрү - логикалык;
- тамга маалымат түрү - char.
Примитивдик түрү | Каптоочу класс |
---|---|
byte | Байт |
кыска | Кыска |
int | бүтүн сан |
узун | Long |
сүзүү | Float |
кош | Double |
логикалык | логикалык |
char | Каарман |
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 = 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ти кайтарат |
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)
int i = Integer.parseInt("10");
System.out.println(i); // 10
Эгерде конвертациялоо мүмкүн болбосо — мисалы, биз parseInt ыкмасына сөздү өткөрдүк — NumberFormatException ыргытылат. parseInt(String s) методунун ашыкча жүктөлгөн бир тууганы бар:
-
static int parseInt(String s, int radix)
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 классынын кээ бир ыкмаларын, ошондой эле кээ бир константаларды карап чыгууга жетиштик. Алар сандарды бир сан системасынан экинчисине которуунун мисалдарын келтиришти.Үй тапшырма
-
Integer классынын дагы кандай ыкмалары бар экенин изилдеңиз (аларды расмий documentациясы бар веб-сайттан окусаңыз болот ), сиз изилдеген ыкмалардын кайсынысы (макалада берилгендерди кошпогондо) сиздин оюңузча эң пайдалуу экенин комментарийге жазыңыз ( сиз тарабынан көбүнчө колдонулат). Жана ошондой эле өз пикириңиздин себептерин келтириңиз.
PS Бул жерде туура жооптор жок, бирок бул иш классты жакшыраак изилдөөгө мүмкүндүк берет.
-
Материалды консолидациялоо үчүн кичинекей жөнөкөй маселени чечиңиз.
Бизде эки номер бар:
1100001001 - экorк санауу системасында
33332 - квинардык сан системасындаInteger классынын методдорун гана колдонуп, берилген эки сандын максимумун аныктап, андан кийин үчтүк сан системасында максималдуу жана минималдуу маанилердин айырмасын көрсөтүү зарыл.
-
Мүмкүн болгон бүтүн сандын максималдуу маанисин сегиздик сан системасына айлантыңыз жана алынган сандагы цифралардын санын көрсөтүңүз (санды программалык түрдө санаңыз).
GO TO FULL VERSION