- •Тема 3. Лексические структуры языка. Примитивные типы данных. Декларация и инициализация переменных. Основные типы операторов.
- •3.1 Примитивные типы данных
- •3.2 Лексические структуры языка
- •3.2.1 Пробелы
- •3.2.2 Идентификаторы
- •3.2.3 Константы
- •3.2.4 Комментарии
- •3.2.5 Разделители
- •3.2.6 Ключевые слова Java
- •4 Операторы
- •4.1 Операция присваивания
- •4.2 Унарные операции
- •4.3 Арифметические бинарные операции
- •4.6 Операции сравнения
- •4.6.1 Логические операции
- •4.7 Условная операция
- •4.8 Приоритет операций
- •4.9 Преобразование и приведение типов при выполнении операций
- •4.10 Переполнение целого числа
- •4.11 Операции с дробными типами
- •4.12 Операция конкатенации строк
- •5 Классы-обертки
- •6 Уловки и ловушки, связанные с плавающей точкой и десятичными числами
- •6.1 Плавающая точка ieee
- •6.2 Специальные числа
- •6.3 Непредвиденные обстоятельства использования плавающей точки
- •6.4 Ошибки округления
- •6.5 Рекомендации по сравнению чисел с плавающей точкой
- •6.6 Не используйте числа с плавающей точкой для точных значений
- •6.7 Большие десятичные дроби для маленьких чисел
- •6.8 Все методы сравнения не созданы равными
- •6.9 Используйте BigDecimal в качестве типа обмена
- •6.10 Построение чисел BigDecimal
4.12 Операция конкатенации строк
Наконец, рассмотрим оператор конкатенации со строкой. Оператор + может принимать в качестве аргумента строковые величины. Если одним из аргументов является строка, а вторым - целое число, то число будет преобразовано в текст, и строки объединятся.
int x = 1;
System.out.print("x=" + x);
Результатом будет:
x = 1
Обратите внимание на следующий пример:
System.out.print(1 + 2 + "text");
System.out.print("text" + 1 + 2);
Его результатом будет:
3text
text12
Отдельно рассмотрим работу с типом char. Значения этого типа могут полноценно участвовать в числовых операциях:
char c1 = 10;
char c2 = 'A'; // латинская буква A (\u0041, код 65)
int i = c1 + c2 - 'B';
Переменная i получит значение 9.
Рассмотрим следующий пример:
char c = 'A';
System.out.println(c);
System.out.println(c + 1);
System.out.println("c = " + c);
System.out.println('c' + '=' + с);
Его результатом будет:
A
66
c = A
225
В первом случае в метод println было передано значение типа char, поэтому отобразился символ. Во втором случае был передан результат сложения, то есть число, и именно число появилось на экране. Далее при сложении со строкой тип char был преобразован в текст в виде символа. Наконец в последней строке произошло сложение трех чисел: 'c' (код 99), '=' (код 61) и переменной c (т.е. код 'A' - 65).
5 Классы-обертки
Для каждого примитивного типа существуют специальные вспомогательные классы-обертки (wrapper classes). Для типов byte, short, int, long, char это Byte, Short, Integer, Long, Character.
Эти классы содержат многие полезные методы для работы с целочисленными значениями. Например, преобразование из текста в число. Кроме этого, есть класс Math, который хоть и предназначен в основном для работы с дробными числами, но также предоставляет некоторые возможности и для целых. Класс Math предоставляет большое количество методов для операций над дробными значениями, например, извлечение квадратного корня, возведение в любую степень, тригонометрические и другие. Также в этом классе определены константы PI и основание натурального логарифма E.
В заключение подчеркнем, что единственные операции с целыми числами, при которых Java генерирует ошибки - это деление на ноль (операторы / и %).
6 Уловки и ловушки, связанные с плавающей точкой и десятичными числами
Хотя практически каждый процессор и язык программирования и поддерживают арифметику с плавающей точкой, но большинство программистов почти не обращают на это внимания. И это понятно - мало кому из нас часто приходиться использовать дробные числовые типы. За исключением научных вычислений и редких случаев тестирования времени или оценки производительности, до этого просто не доходит дело. Десятичные числа с произвольной разрядностью, предоставляемые java.math.BigDecimal, также не используются большинством разработчиков, так как основная масса приложений не нуждается в их применении. Тем не менее, превратности представления дробных чисел все-таки иногда проникают и в программы, базирующиеся на целых числах. Например, JDBC использует BigDecimal как предпочтительный формат обмена для колонок DECIMAL SQL.