Основные синтаксические и семантические единицы языка Java. Примитивныe типы данных и основные операторы языка: Методические указания к лабораторной работе, страница 4

Кроме представления обычных чисел, типы данных float и double могут представлять четыре специальных значения: положительную и отрицательную бесконечность (infinity), нуль и NaN (Not a Number). Значения бесконечности получаются, если результат вычисления с плавающей точкой превышает диапазон float или double. Нулевое значение представляет собой результат вычисления с плавающей точкой, который меньше нижней границы диапазона float или double. В типах с плавающей точкой в Java различают положительный и отрицательный нуль в зависимости от места, в котором возникло значение ниже минимального. Положительный и отрицательный нули – это разные значения, но их использование в выражениях всегда дает одинаковый результат (с точностью до знака бесконечности, если выполнялось деление на нуль). И наконец, последним специальным значением является NaN, то есть нечисловое значение. Значение NaN получается при выполнении недопустимой операции с плавающей точкой, например 0.0/0.0. Далее приводятся примеры операторов, приводящих к этим частным значениям:

double inf = 1.0/0.0;      // Бесконечность

double negInf = -1,0/0.0;         // Отрицательная бесконечность

double negZero = -1.0/inf;      // Отрицательный нуль

double NotANumber = 0.0/0.0;         // Не числовое значение

Поскольку при операциях с плавающей точкой в Java переполнение сводится к бесконечности, антипереполнение – к нулю, а также имееется особое NaN-значение, арифметические операции с плавающей точкой никогда не генерируют исключений, даже при выполнении недопустимых операций, например при делении нуля на нуль либо при вычислении корня отрицательного числа.

Примитивные типы float и double имеют соответствующие классы-обертки, которые называются Float и Double. Каждый из этих классов определяет следующие полезные константы: MIN_VALUE, MAX_VALUE, NEGATIVE_INFINITY, POSITIVE_INFINITY и NaN.

Бесконечные значения с плавающей точкой ведут себя вполне логично. Например, прибавление к бесконечности или вычитание из нее любого конечного значения дает бесконечность. Поведение отрицательного нуля почти не отличается от положительного нуля; оператор равенства == сообщает о равенстве отрицательного и положительного нуля. Единственный способ отличить отрицательный нуль от положительного или обычного нуля – разделить на него какое-либо число. 1.0/0.0 дает положительную бесконечность, а деление 1.0 на отрицательный нуль дает отрицательную бесконечность. И наконец, поскольку NaN не является числом, оператор == сообщает, что это значение не равно ни одному другому числу, включая само это значение. Чтобы проверить, являются ли значения float и double нечисловыми (NaN), следует вызывать методы Float.isNaN() и Double.isNaN().

Строки

Кроме булевых, символьных, целых типов данных и типов данных с плавающей точкой, в Java существует тип для работы со строками текста (или просто строками). Однако тип String представляет собой класс и не относится к примитивным типам языка. Тем не менее, в Java есть синтаксис для непосредственного включения строковых значений в программу, необходимый по причине широкого употребления строк. Литерал типа String состоит из произвольного текста в двойных кавычках.

"Hello, world" "'This' is a string!"

Строковые литералы могут содержать любые управляющие последовательности, которые могут представлять литералы типа char. Для включения в литерал типа String двойных кавычек нужно использовать последовательность \".

Преобразования типов

В Java возможны преобразования между целыми значениями и значениями с плавающей точкой. Кроме того, можно преобразовывать значения целых типов и типов с плавающей точкой в значения типа char и наоборот, поскольку каждый символ соответствует цифре в кодировке Unicode.Тип boolean является единственным примитивным типом в Java, который нельзя преобразовать в другой примитивный тип. Кроме того, любой другой примитивный тип нельзя преобразовать в boolean.

Существует два основных типа преобразований. Расширяющее преобразование (widening conversion) происходит, если значение одного типа преобразовывается в более широкий тип, с большим диапазоном допустимых значений. Компилятор Java обеспечивает выполнение расширяющих преобразований автоматически. Например, если значение типа int присваивается переменной типа double или значение типа char присваивается переменной типа int.