ПредишенСледващото

Java се отнася до силно типов език - това означава, че към момента на съставяне почти винаги се извършва на проверката за тип съвместимост. Java предотвратява неправилно задача, за забрана на всички от всякакви съмнителни сделки, и осигурява механизъм за привеждане на тези видове случаи, когато съвместимост могат да бъдат проверени само по време на изпълнението на програмата. Ще разгледаме примера на леене оператор за присвояване, но това се отнася и за трансформации вътре изрази, както и до възлагане параметри методи.

5.13.1. Скритият тип

Java също подкрепя имплицитно леене цяло число за типове с плаваща запетая, но не и обратно - по такъв преход не настъпва долен поток, като обхвата на плаваща точка стойности по-високи от тази на всеки от видовете число.

Спасяването на границата, която не трябва да се бърка с опазване точност. В някои косвени реализации може да загуби точност. Помислете например за превръщането в дългосрочен поплавъка. Float стойности са 32-битови, и стойностите на дълга -

64-битова версия. поплавък има по-малко значещи цифри отколкото дълго, въпреки че,

този тип може да съхранява по-голям брой диапазон. Присвояване на стойност на дълга

променлива с плаваща запетая може да доведе до загуба на данни. Да разгледаме следния фрагмент:

дълго Orig = 0x7effffffffffffffL;

поплавък fval = Orig;

дълго губят = (дължина) fval;

System.out.println ( "Orig =" + Orig); System.out.println ( "fval =" + fval); System.out.println ( "losw =" + загубите);

Първите две изявления създават дълго стойност и които възлага да плува. За да се покаже, че това е загуба на точност, ние да правят изрични гласове fval за дълъг и получава стойност друга променлива (изрично тип се обсъжда по-долу). Програмата резултати изход позволява да се уверите, че стойността на плувка е загубил част от точност, тъй като стойността на първоначалната променлива ориг дълго тип, различен от това, което е получено чрез обратна задействане изрично стойност на променливата fval дълго вида:

Orig = 9151314442816847871 fval = 9.15131e + 18

Стойността може да бъде определен нулев референтен обект от всякакъв вид, включително позоваване на масива.

5.13.2. Изрично отливки и instanceof

Когато стойността на един вид не може да се причисли към променлива от друг вид мълчаливо да използвате изрично тип често (гласове). Тя изисква изрично гласове към новата стойност на новия тип, както и е възможно в съответствие със стария стойността на стария тип. Някои явен каст, не е валиден (не можете да конвертирате булева да INT), но се допуска, например, изрично гласове да се удвои стойността на вида на дълга, както е показано в следния фрагмент:

Когато плаваща точка стойност се превръща в неразделна тип, неговата относителна част се изхвърля; например, (междинно съединение) -72,3 равнява -72. Класът Math има методи, които иначе биха извършват закръглянето на плаваща запетая, когато се превръща в цяло число - виж "клас математика" ..

Двойна стойност може също да бъде ясно съпоставена с плувка тип, както и цялото число

Тип - до по-малък вид число. Когато е активирано двойно поплавък за възможна загуба на точност или поява на нулева или безкрайна стойност вместо съществуващата преди края.

Събирането видове число е "рязане" техните висок ред бита. Ако стойността на по-голямо цяло се вписва в по-малък тип, към които се проявява трансформацията, а след това нищо страшно не се случва. Въпреки това, ако стойността на по-широк вид число е извън тесен тип, загубата на високо ред бита промените стойността, колкото е възможно - и знак. фрагмент:

System.out.println ( "S" = + S + ", б =" + б);

следния изход (и по-високо ред бита се губят при поддържане стойностите в б):

знак може да се превърне всеки тип число и обратното. При задействане на типа число в овъгляването се използват само долните 16 бита и останалите битове се изхвърлят. При преобразуване тип знак в горните 16 бита са подплатени с нули. Независимо от това, по-късно на работа с тези битове се извършва по абсолютно същия начин, както всеки друг. Следният код фрагмент максимална Unicode характер се превръща в междинно съединение (косвено) и кратко тип (очевидно). Стойност междинно съединение (0x0000ffff) е положително, тъй като горните битове нулеви символ. Въпреки това, при задействане на вида, получени чрез кратко отрицателна стойност, тъй като видът MSB кратко е знаков бит:

публично статично невалидни основни (String [] опцията)

Int аз = '\ uffff;

кратки S = ​​(кратко) '\ uffff;

System.out.println ( "I =" + I); System.out.println ( "S =" + S);

И тук е в резултат на:

Изрично тип може да се прилага към обекти. Въпреки, че удължаването на тип обект се оставя да се използва вместо обекта на подтип на, обратното обикновено не е вярно. Да предположим, че има следния предмет йерархията:

Но понякога абсолютно знаете точно какво всъщност е Кафе обект инстанция на клас Мока. В този случай е възможно да се извърши изрично Даункастинг. Това се прави по следния начин:

Мока фантазия = (Мока) Джо;

Понякога методът не изисква обект се отнася до по-голям тип, но може да предостави разширени съоръжения като допълнителни функции. Можете да направите един глас и да се справят изключение, обаче, използването на изключения за такива цели е сравнително бавен и по тази причина се счита за проява на лош писмена форма. За да се определи дали предметът принадлежи към определен тип, instanceof приложим метод, който връща вярно за допустимите операции:

обществени невалидни пия на големи глътки (Кафе Джо)

ако (Джо instanceof Мока)

// ... използва функционалността на Мока

нула instanceof Type

Винаги е невярна за всеки тип Type.

5.13.3. низ гласове

Класът String е различна от другите: той се използва по подразбиране оператор наниз

+, и низовете се отнасят до String. Примерите, които вече сме се срещнаха в програмите: при изпълнение на Java наниз се опитва да се превърнат в по-String всичко останало, не принадлежи към този тип. Такова шофиране е определена за всички примитиви и изпълнява, като се обадите на обекта ToString (вж. Раздел "ToString метод").

Ако преобразувате в String нулева справка, резултатът е "нула" низ. Ако този метод клас ToString не е определена, тя използва метода наследена от класа на обекта, и се връща на низ на обекта.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!