JavaRush /Блоги Java /Random-TG /Намудҳои ибтидоӣ дар Java: Онҳо он қадар ибтидоӣ нестанд
Viacheslav
Сатҳи

Намудҳои ибтидоӣ дар Java: Онҳо он қадар ибтидоӣ нестанд

Дар гурӯҳ нашр шудааст

Муқаддима

Таҳияи барномаҳоро метавон ҳамчун кор бо баъзе маълумотҳо, дурусттараш нигоҳдорӣ ва коркарди он баррасӣ кард. Имруз ман мехостам ба як чихати асосй дахл кунам. Маълумот дар Java чӣ гуна нигоҳ дошта мешавад? Дар ин ҷо мо ду формати имконпазир дорем: намудҳои маълумотҳои истинод ва ибтидоӣ . Биёед дар бораи навъҳои навъҳои ибтидоӣ ва имконоти кор бо онҳо сӯҳбат кунем (ҳар чӣ гуфтан мумкин аст, ин асоси дониши мо дар бораи забони барномасозӣ аст). Намудҳои ибтидоии маълумоти Java таҳкурсие мебошанд, ки ҳама чиз бар он такя мекунад. Не, ман аслан муболига намекунам. Oracle як дастури алоҳида дорад, ки ба ибтидоӣ бахшида шудааст: Намудҳои маълумоти ибтидоӣ Навъҳои ибтидоӣ дар Java: Онҳо он қадар ибтидоӣ нестанд - 1 Таърихи каме. Дар ибтидо сифр буд. Аммо сифр дилгиркунанда аст. Ва он гоҳ каме пайдо шуд . Чаро ӯро ин тавр номиданд? Он аз ихтисораи « bi nary digi t » (рақами дуӣ) чунин ном гирифтааст. Яъне танҳо ду маъно дорад. Ва азбаски он сифр буд, мантиқист, ки ҳоло ё 0 ё 1. Ва зиндагӣ шавқовартар шудааст. Лаҷом ба рама ҷамъ шудан гирифтанд. Ва ин рамаҳо byte (byte) номида шуданд . Дар ҷаҳони муосир, byte = 2 ба қудрати сеюм, яъне. 8. Аммо маълум мешавад, ки ин на ҳамеша чунин будааст. Дар бораи аз кучо пайдо шудани номи byte тахмину ривояту миш-мишхои зиёде мавчуданд. Баъзе одамон фикр мекунанд, ки ин ҳама дар бораи рамзгузории он замон аст, дар ҳоле ки дигарон фикр мекунанд, ки хондани маълумот бо ин роҳ фоидаовартар буд. Байт хурдтарин порчаи хотираи addressшаванда мебошад. Ин byteҳое мебошанд, ки дар хотира суроғаҳои беназир доранд. Ривояте ҳаст, ки ByTe ихтисораи истилоҳи Binary - калимаи мошинист. Калимаи мошин - содда карда гӯем, ин миқдори маълумотест, ки протсессор дар як амалиёт коркард карда метавонад. Пештар, андозаи калимаи мошин бо хурдтарин хотираи addressшаванда якхела буд. Дар Java, тағирёбандаҳо метавонанд танҳо арзишҳои byteро нигоҳ доранд. Тавре ки ман дар боло гуфтам, дар Java ду намуди тағирёбандаҳо мавҷуданд:
  • намудҳои ибтидоии java бевосита арзиши byteҳои маълумотро нигоҳ медоранд (мо дар зер ба таври муфассал навъҳои ин ибтидоиро дида мебароем);
  • навъи истинод, byteҳои суроғаи an objectро дар Heap нигоҳ медорад, яъне тавассути ин тағирёбандаҳо мо бевосита ба худи an object дастрасӣ пайдо мекунем (навъи идоракунии дурдаст барои an object)

Байти Java

Ҳамин тавр, таърих ба мо як byte дод - ҳадди ақали хотирае, ки мо метавонем онро истифода барем. Ва он аз 8 бит иборат аст. Хурдтарин навъи маълумот дар java byte аст. Ин навъи 8-бити имзошуда аст. Ин чӣ маъно дорад? Биёед ҳисоб кунем. 2^8 256 аст. Аммо агар мо рақами манфӣ бихоҳем? Ва таҳиягарони Java тасмим гирифтанд, ки рамзи дуии "10000000" -128-ро ифода мекунад, яъне бит аз ҳама муҳим (бити аз чап) манфӣ будани ададро нишон медиҳад. Бинарии "0111 1111" ба 127 баробар аст. Яъне 128-ро ба ҳеҷ ваҷҳ таъин кардан мумкин нест, зеро -128 мешавад. Ҳисоби пурра дар ин ҷавоб оварда шудааст: Чаро диапазони byteҳо дар Java -128 то 127 аст? Барои фаҳмидани он ки рақамҳо чӣ гуна ба даст оварда шудаанд, шумо бояд ба расм нигаред:
Навъҳои ибтидоӣ дар Java: Онҳо он қадар ибтидоӣ нестанд - 2
Мувофиқи он, барои ҳисоб кардани андозаи 2^(8-1) = 128. Ин маънои онро дорад, ки ҳадди ақали ҳадди ақал (ва он минус дорад) -128 хоҳад буд. Ва ҳадди аксар 128 - 1 аст (тарҳи сифр). Яъне, ҳадди аксар 127 хоҳад буд. Дарвоқеъ, мо бо навъи byte чандон дар “сатҳи баланд” кор намекунем. Асосан ин коркарди маълумоти "хом" мебошад. Масалан, ҳангоми кор бо интиқоли додаҳо тавассути шабака, вақте ки маълумот маҷмӯи 0 ва 1 мебошад, ки тавассути ягон канали алоқа интиқол дода мешавад. Ё ҳангоми хондани маълумот аз файлҳо. Онҳо инчунин метавонанд ҳангоми кор бо сатрҳо ва рамзгузорӣ истифода шаванд. Рамзи намунавӣ:
public static void main(String []args){
        byte value = 2;
        byte shortByteValue = 0b10; // 2
        System.out.println(shortByteValue);
        // Начиная с JDK7 мы можем разделять литералы подчёркиваниями
        byte minByteValue = (byte) 0B1000_0000; // -128
        byte maxByteValue = (byte) 0b0111_1111; // 127
        byte minusByteValue = (byte) 0b1111_1111; // -128 + 127
        System.out.println(minusByteValue);
        System.out.println(minByteValue + " to " + maxByteValue);
}
Дар омади гап, фикр накунед, ки истифодаи навъи byte истеъмоли хотираро кам мекунад. Байт асосан барои кам кардани сарфи хотира ҳангоми нигоҳдории маълумот дар массивҳо истифода мешавад (масалан, нигоҳ доштани маълумоти тавассути шабака гирифташуда дар баъзе буфер, ки ҳамчун массиви byte амалӣ карда мешавад). Аммо ҳангоми иҷрои амалҳо бо додаҳо, истифодаи byte ба интизориҳои шумо мувофиқат намекунад. Ин ба татбиқи Java Virtual Machine (JVM) вобаста аст. Азбаски аксари системаҳо 32 ё 64 бит мебошанд, byte ва кӯтоҳ ҳангоми ҳисобҳо ба int 32-бит табдил дода мешаванд, ки мо дар бораи он баъдтар сӯҳбат хоҳем кард. Ин ҳисобҳоро осон мекунад. Барои тафсилоти бештар нигаред. Оё илова кардани byte ба int аз сабаби қоидаҳои забони java ё аз сабаби jvm табдил меёбад? . Ҷавоб инчунин истинодҳоро ба JLS (Мушаххасоти забони Java) дар бар мегирад. Илова бар ин, истифодаи byte дар ҷои нодуруст метавонад ба лаҳзаҳои ногувор оварда расонад:
public static void main(String []args){
        for (byte i = 1; i <= 200; i++) {
            System.out.println(i);
        }
}
Дар ин ҷо як ҳалқа хоҳад буд. Азбаски арзиши ҳисобкунак ба ҳадди аксар (127) мерасад, изофабор ба амал меояд ва қимат -128 мешавад. Ва мо ҳеҷ гоҳ аз давра берун намешавем.

кӯтоҳ

Маҳдудияти арзишҳои byte хеле хурд аст. Аз ин рӯ, барои намуди навбатии додаҳо мо тасмим гирифтем, ки шумораи битҳоро дучанд кунем. Яъне, ҳоло на 8 бит, балки 16. Яъне, 2 byte. Арзишҳоро метавон бо ҳамин тарз ҳисоб кард. 2^(16-1) = 2^15 = 32768. Ин маънои онро дорад, ки диапазон аз -32768 то 32767 аст. Он барои ҳама гуна ҳолатҳои махсус хеле кам истифода мешавад. Тавре ки ҳуҷҷатҳои забони Java ба мо мегӯянд: " Шумо метавонед кӯтоҳро барои захира кардани хотира дар массивҳои калон истифода баред ."

int

Ҳамин тавр, мо ба намуди маъмултарин истифода шудем. Он 32 бит ё 4 byte мегирад. Умуман, мо боз хам дучанд. Диапазони арзишҳо аз -2^31 то 2^31-1 аст.

Арзиши максималии int

Қимати максималии int 2147483648 1 аст, ки умуман хурд нест. Тавре ки дар боло гуфта шуд, барои оптимизатсияи ҳисобҳо, зеро Барои компютерҳои муосир бо назардошти иқтидори битҳои онҳо ҳисоб кардан қулайтар аст; маълумотро ба таври ғайримустақим ба int табдил додан мумкин аст. Инак як мисоли оддӣ:
byte a = 1;
byte b = 2;
byte result = a + b;
Чунин рамзи безарар, аммо мо хато мегирем: "хато: намудҳои номувофиқ: табдor эҳтимолии гумшуда аз int ба byte." Шумо бояд онро ба натиҷаи byte ислоҳ кунед = (byte)(a + b); Ва боз як мисоли безарар. Агар мо рамзи зеринро иҷро кунем, чӣ мешавад?
int value = 4;
System.out.println(8/value);
System.out.println(9/value);
System.out.println(10/value);
System.out.println(11/value);
Ва мо хулоса мебарорем
2
2
2
2
*садои воҳима*
Гап дар сари он аст, ки хангоми кор бо арзишхои int, бокимондааш партофта мешавад ва танхо тамоми кисми боки мемонад (дар чунин холатхо дукаратаро истифода бурдан бехтар аст).

дароз

Мо дучанд карданро давом медихем. Мо 32-ро ба 2 зарб мекунем ва 64 бит мегирем. Аз рӯи анъана ин 4 * 2, яъне 8 byte аст. Диапазони арзишҳо аз -2^63 то 2^63 - 1. Зиёда аз кофӣ. Ин намуд ба шумо имкон медиҳад, ки рақамҳои калон ва калонро ҳисоб кунед. Аксар вақт ҳангоми кор бо вақт истифода мешавад. Ё дар масофаи дур, масалан. Барои нишон додани он ки адад дароз аст, пас аз адад калимаи аслии L - Longро ҷойгир кунед. Мисол:
long longValue = 4;
longValue = 1l; // Не ошибка, но плохо читается
longValue = 2L; // Идеально
Ман мехостам аз худам пеш равам. Минбаъд, мо дар бораи он, ки барои примитивҳо парпечҳои мувофиқ мавҷуданд, ки имкон медиҳанд, ки бо ибтидо ҳамчун an object кор кунанд. Аммо як хусусияти ҷолиб вуҷуд дорад. Ин як мисол аст: Бо истифода аз ҳамон як компилятори онлайн Tutorialspoint, шумо метавонед рамзи зеринро тафтиш кунед:
public class HelloWorld {

     public static void main(String []args) {
        printLong(4);
     }

    public static void printLong(long longValue) {
        System.out.println(longValue);
    }
}
Ин code бе хато кор мекунад, ҳама чиз хуб аст. Аммо вақте ки навъи усули printLong аз long ба Long иваз карда мешавад (яъне навъи ибтидоӣ не, балки an object мешавад), барои Java норавшан мешавад, ки мо кадом параметрро мегузарем. Он ба тахмин кардан оғоз мекунад, ки int интиқол дода мешавад ва хатогӣ рух медиҳад. Аз ин рӯ, дар мавриди усул, ба таври возеҳ нишон додани 4L зарур аст. Ҳангоми кор бо базаҳои маълумотҳо аксар вақт long ҳамчун ID истифода мешавад.

Java шино мекунад ва Java дучандон

Ин намудҳоро навъҳои нуқтаи шинокунанда меноманд. Яъне, инҳо намудҳои бутун нестанд. Навъи шинокунанда 32 бит (мисли int) аст ва double навъи дақиқи дукарата номида мешавад, аз ин рӯ он 64 бит аст (ба 2 зарб кунед, ҳамон тавре ки ба мо маъқул аст). Мисол:
public static void main(String []args){
        // float floatValue = 2.3; lossy conversion from double to float
        float floatValue = 2.3F;
        floatValue = 2.3f;
        double doubleValue = 2.3;
        System.out.println(floatValue);
        double cinema = 7D;
}
Ва ин аст як мисоли фарқияти арзишҳо (бо сабаби дақиқии навъи):
public static void main(String []args){
        float piValue = (float)Math.PI;
        double piValueExt = Math.PI;
        System.out.println("Float value: " + piValue );
        System.out.println("Double value: " + piValueExt );
 }
Ин навъҳои ибтидоӣ, масалан, дар математика истифода мешаванд. Ин аст далел, як доимӣ барои ҳисоб кардани рақами PI . Хуб, дар маҷмӯъ, шумо метавонед ба API-и синфи Math назар кунед. Ин аст, ки чизи дигаре бояд муҳим ва ҷолиб бошад: ҳатто дар ҳуҷҷатҳо гуфта мешавад: " Ин навъи маълумот ҳеҷ гоҳ набояд барои арзишҳои дақиқ, ба монанди асъор истифода шавад. Барои ин, шумо бояд ба ҷои синфи java.math.BigDecimal истифода баред. Рақамҳо ва сатрҳо BigDecimal ва дигар синфҳои муфидеро, ки платформаи Java пешниҳод кардааст, фаро мегирад. " Яъне, пул дар шиноварӣ ва дукарата ҳисоб кардан лозим нест. Намуна дар бораи дақиқӣ бо истифода аз мисоли кор дар NASA: Java BigDecimal, Мубориза бо ҳисобҳои дақиқи баланд Хуб, барои худ эҳсос кунед:
public static void main(String []args){
        float amount = 1.0000005F;
        float avalue = 0.0000004F;
        float result = amount - avalue;
        System.out.println(result);
}
Ба ин мисол пайравӣ кунед ва баъд пеш аз рақамҳои 5 ва 4 0 илова кунед. Ва шумо ҳама даҳшатро хоҳед дид) Ба забони русӣ дар бораи float and double гузориши ҷолиб мавҷуд аст: https://youtu.be/1RCn5ruN1fk Мисолҳои кор бо BigDecimal дар ин ҷо дидан мумкин аст: Бо BigDecimal сент созед Ба ҳар ҳол, float ва double метавонад на танҳо рақамро баргардонад. Масалан, мисоли зер Infinity-ро бармегардонад:
public static void main(String []args){
        double positive_infinity = 12.0 / 0;
        System.out.println(positive_infinity);
}
Ва ин NAN-ро бармегардонад:
public static void main(String []args){
        double positive_infinity = 12.0 / 0;
        double negative_infinity = -15.0 / 0;
        System.out.println(positive_infinity + negative_infinity);
}
Дар бораи беохир равшан аст. NaN чист? Ин рақам нест , яъне натиҷаро ҳисоб кардан мумкин нест ва рақам нест. Инак як мисол: Мо мехоҳем решаи квадратии -4-ро ҳисоб кунем. Решаи квадратии 4 2 аст. Яъне 2 бояд квадрат шавад ва баъд 4-ро ба даст меорем. Барои ба даст овардани -4 чиро бояд квадрат кард? Ин кор намекунад, зеро ... агар рақами мусбат вуҷуд дошта бошад, пас он боқӣ мемонад. Ва агар он манфӣ бошад, пас минус бо минус плюс медиҳад. Яъне он ҳисобшаванда нест.
public static void main(String []args){
        double sqrt = Math.sqrt(-4);
        System.out.println(sqrt + 1);
        if (Double.isNaN(sqrt)) {
           System.out.println("So sad");
        }
        System.out.println(Double.NaN == sqrt);
}
Дар ин ҷо боз як шарҳи олиҷаноб дар мавзӯи рақамҳои нуқтаи шинокунанда: Нуқтаи шумо дар куҷост?
Боз чӣ бояд хонд:

Java логикӣ

Навъи навбатӣ мантиқӣ (навъи мантиқӣ) мебошад. Он метавонад танҳо арзишҳои ҳақиқӣ ё бардурӯғро қабул кунад, ки калимаҳои калидӣ мебошанд. Дар амалиётҳои мантиқӣ, аз қабor ҳалқаҳои while ва дар шохасозӣ бо истифода аз if, switch истифода мешавад. Кадом чизҳои ҷолибро шумо дар ин ҷо ёфта метавонед? Хуб, масалан, аз ҷиҳати назариявӣ, ба мо танҳо 1 бит иттилоот лозим аст, 0 ё 1, яъне дуруст ё бардурӯғ. Аммо дар асл, Boolean хотираи бештарро мегирад ва ин аз татбиқи мушаххаси JVM вобаста хоҳад буд. Одатан ин арзиш бо int баробар аст. Варианти дигар ин истифодаи BitSet мебошад. Ин аст тавсифи мухтасари китоби Java Fundamentals: BitSet

Харфи Java

Ҳоло мо ба навъи охирини ибтидоӣ расидем. Ҳамин тавр, маълумот дар char 16 бит мегирад ва аломатро тавсиф мекунад. Java рамзгузории Юниcodeро барои char истифода мебарад. Рамзро мувофиқи ду ҷадвал гузоштан мумкин аст (шумо метавонед онро дар инҷо бубинед ):
  • Ҷадвали аломатҳои Юниcode
  • Ҷадвали аломатҳои ASCII
Навъҳои ибтидоӣ дар Java: Онҳо он қадар ибтидоӣ нестанд - 3
Намуна дар студия:
public static void main(String[] args) {
    char symbol = '\u0066'; // Unicode
    symbol = 102; // ASCII
    System.out.println(symbol);
}
Воқеан, char, ки аслан як адад аст, амалҳои математикиро, аз қабor ҷамъ, дастгирӣ мекунад. Ва баъзан ин метавонад ба оқибатҳои хандовар оварда расонад:
public class HelloWorld{

    public static void main(String []args){
        String costForPrint = "5$";
        System.out.println("Цена только для вас " +
        + costForPrint.charAt(0) + getCurrencyName(costForPrint.charAt(1)));
    }

    public static String getCurrencyName(char symbol) {
        if (symbol == '$') {
            return " долларов";
        } else {
            throw new UnsupportedOperationException("Not implemented yet");
        }
    }

}
Ман тавсия медиҳам, ки IDE-и онлайнро аз tutorialspoint тафтиш кунед . Вақте ки ман ин муамморо дар яке аз конфронсҳо дидам, рӯҳияи маро баланд кард. Умедворам, ки мисол ба шумо низ маъқул аст) НАВОРӢ: Ин дар Joker 2017 буд, гузориш: " Java Puzzlers NG S03 - Ҳамаатон аз куҷо омадаед?! "

Ҳарфҳо

Литерал як арзиши возеҳ аст. Бо истифода аз литералҳо, шумо метавонед арзишҳоро дар системаҳои рақамии гуногун муайян кунед:
  • Системаи даҳӣ: 10
  • Шонздаҳӣ: 0x1F4, бо 0x оғоз мешавад
  • Системаи ҳаштгона: 010, аз сифр оғоз мешавад.
  • Системаи дуӣ (аз Java7): 0b101, аз 0b оғоз мешавад
Ман каме бештар дар бораи системаи ҳаштсола таваққуф мекардам, зеро ин хандаовар аст:
int costInDollars = 08;
Ин сатри code тартиб дода намешавад:
error: integer number too large: 08
Чунин ба назар мерасад, ки сафсата аст. Акнун биёед дар бораи системаҳои дуӣ ва ҳаштгона ба ёд орем. Дар системаи дуӣ ду нест, зеро ду арзиш вуҷуд дорад (аз 0 сар карда). Ва системаи ҳаштгона 8 арзиш дорад, ки аз сифр сар карда. Яъне худи арзиши 8 вуҷуд надорад. Аз ин рӯ, ин хатоест, ки дар назари аввал бемаънӣ менамояд. Ва дар хотир доред, ки ин ҷо қоидаҳои "пайравӣ" барои тарҷумаи арзишҳо мавҷуданд:
Примитивные типы в Java: Не такие уж они и примитивные - 4

Синфҳои бастабандӣ

Примитивҳо дар Java синфҳои бастабандии худро доранд, то шумо метавонед бо онҳо ҳамчун an object кор кунед. Яъне барои ҳар як навъи ибтидоӣ як навъи истинод мавҷуд аст. Примитивные типы в Java: Не такие уж они и примитивные - 5Синфҳои бастабандӣ тағйирнопазиранд: ин маънои онро дорад, ки вақте ки an object сохта мешавад, ҳолати он - арзиши майдони арзиш - тағир дода намешавад. Синфҳои бастабандӣ ҳамчун ниҳоӣ эълон карда мешаванд: an objectҳо, ба ибораи дигар, танҳо барои хондан. Хамчунин гуфтаниам, ки аз ин синфхо мерос гирифтан мумкин нест. Java ба таври худкор табдилҳоро байни навъҳои ибтидоӣ ва печонидани онҳо анҷом медиҳад:
Integer x = 9;          // autoboxing
int n = new Integer(3); // unboxing
Раванди табдил додани навъҳои ибтидоӣ ба намудҳои истинод (int->Integer) autoboxing ва баръакс unboxing номида мешавад . Ин синфҳо имкон медиҳанд, ки ибтидоӣ дар дохor an object захира карда шаванд ва худи an object мисли Объект рафтор мекунад (хуб, мисли ҳама гуна an objectи дигар). Бо ин ҳама, мо миқдори зиёди усулҳои гуногун ва муфиди статикиро ба даст меорем, ба монанди муқоисаи ададҳо, табдил додани аломат ба ҳолат, муайян кардани ҳарф ё адад будани аломат, ҷустуҷӯи шумораи минималӣ ва ғайра. Маҷмӯи функсияҳои пешниҳодшуда танҳо аз худи бастабанд вобаста аст. Намунаи амалигардонии худи шумо барои int:
public class CustomerInt {

   private final int value;

   public CustomerInt(int value) {
       this.value = value;
   }

   public int getValue() {
       return value;
   }
}
Бастаи асосӣ, java.lang, аллакай татбиқи синфҳои Boolean, Byte, Short, Character, Integer, Float, Long, Double дорад ва ба мо лозим нест, ки чизе аз худамон созем, балки танҳо аз нав истифода баред. яксон. Масалан, чунин синфҳо ба мо имкон медиҳанд, ки, масалан, Рӯйхат эҷод кунем , зеро Рӯйхат бояд танҳо an objectҳоро дар бар гирад, ки примитивҳо нестанд. Барои табдил додани арзиши навъи ибтидоӣ, усулҳои статикии valueOf мавҷуданд, масалан, Integer.valueOf(4) an objectи навъи Integerро бармегардонад. Барои табдor баръакс усулҳои intValue(), longValue() мавҷуданд. Компилятор зангҳоро ба valueOf ва *Value мустақилона ворид мекунад, ин моҳияти autoboxing ва autounboxing аст. Намунаи бастабандии автоматӣ ва бастабандии худкори дар боло овардашуда воқеан чунин менамояд:
Integer x = Integer.valueOf(9);
int n = new Integer(3).intValue();
Дар ин мақола шумо метавонед дар бораи бастабандии худкор ва худкушӣ маълумоти бештар гиред .

Аксҳо

При работе с примитивами существует такое понятие How приведение типов, одно из не очень приятных свойств C++, тем не менее приведение типов сохранено и в языке Java. Иногда мы сталкиваемся с такими ситуациями, когда нам нужно совершать взаимодействия с данными разных типов. И очень хорошо, что в некоторых ситуациях это возможно. В случае с ссылочными переменными, там свои особенности, связанные с полиморфизмом и наследованием, но сегодня мы рассматриваем простые типы и соответственно приведение простых типов. Существует преобразование с расширением и преобразование сужающее. Всё на самом деле просто. Если тип данных становится больше (допустим, был int, а стал long), то тип становится шире (из 32 бит становится 64). И в этом случае мы не рискуем потерять данные, т.к. если влезло в int, то в long влезет тем более, поэтому данное приведение мы не замечаем, так How оно осуществляется автоматически. А вот в обратную сторону преобразование требует явного указания от нас, данное приведение типа называется — сужение. Так сказать, чтобы мы сами сказали: «Да, я даю себе отчёт в этом. В случае чего — виноват сам».
public static void main(String []args){
   int intValue = 128;
   byte value = (byte)intValue;
   System.out.println(value);
}
Whatбы потом в таком случае не говорor что «Ваша Джава плохая», когда получат внезапно -128 instead of 128 ) Мы ведь помним, что в byteе 127 верхнее meaning и всё что находилось выше него соответственно можно потерять. Когда мы явно превратor наш int в byte, то произошло переполнение и meaning стало -128.

Область видимости

Это то место в codeе, где данная переменная будет выполнять свои функции и хранить в себе Howое-то meaning. Когда же эта область закончится, переменная перестанет существовать и будет стерта из памяти и. How уже можно догадаться, посмотреть or получить ее meaning будет невозможно! Так что же это такое — область видимости? Примитивные типы в Java: Не такие уж они и примитивные - 6Область определяется "блоком" — вообще всякой областью, замкнутой в фигурные скобки, выход за которые сулит удаление данных объявленных в ней. Или How минимум — сокрытие их от других блоков, открытых вне текущего. В Java область видимости определяется двумя основными способами:
  • Классом.
  • Методом.
Как я и сказал, переменная не видна codeу, если она определена за пределами блока, в котором она была инициализирована. Смотрим пример:
int x;
x = 6;
if (x >= 4) {
   int y = 3;
}
x = y;// переменная y здесь не видна!
И How итог мы получим ошибку:

Error:(10, 21) java: cannot find symbol
  symbol:   variable y
  location: class com.javaRush.test.type.Main
Области видимости могут быть вложенными (если мы объявor переменную в первом, внешнем блоке, то во внутреннем она будет видна).

Заключение

Сегодня мы познакомorсь с восемью примитивными типами в Java. Эти типы можно разделить на четыре группы:
  • Целые числа: byte, short, int, long — представляют собой целые числа со знаком.
  • Числа с плавающей точкой — эта группа включает себе float и double — типы, которые хранят числа с точностью до определённого знака после запятой.
  • Булевы значения — boolean — хранят значения типа "истина/ложь".
  • Аломатҳо - ин гурӯҳ навъи аломатро дар бар мегирад.
Тавре ки матни боло нишон дод, примитивҳо дар Java он қадар ибтидоӣ нестанд ва ба шумо имкон медиҳанд, ки бисёр мушкилотро самаранок ҳал кунед. Аммо ин инчунин баъзе хусусиятҳоро муаррифӣ мекунад, ки мо бояд дар хотир дошта бошем, агар мо намехоҳем бо рафтори пешгӯинашаванда дар барномаи худ дучор шавем. Чунон ки мегуянд, барои хама чиз пул додан лозим. Агар мо хоҳем, ки ибтидоӣ бо диапазони "нишеб" (васеъ) - чизе монанди дароз - мо ҷудо кардани як порчаи хотираи калонтарро қурбон мекунем ва дар самти муқобил. Бо сарфаи хотира ва истифодаи byteҳо мо доираи маҳдуди аз -128 то 127 ба даст меорем.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION