n Арифметические операции
l + – сложение двух значений
l - – вычитание второго значения из первого
l * – умножение двух значений
l / – деление первого значения на второе
l % – остаток от деления первого значения на второе
n Результат имеет тип, совпадающий с «наиболее широким» типом из типов операндов, но не меньше, чем int
Особенность примитивных вещественных типов
int a = 5, b = 0; int c = a / b; System.out.println(c); | Exception in thread "main" java.lang.ArithmeticException |
float a = 5, b = 0; float c = a / b; System.out.println(c); | Infinity |
Легальные значения
Positive Infinity (Infinity)
Negative Infinity (-Infinity)
Not a Number (NaN)
Различаются значения 0, +0 и -0
Арифметические операторы примитивных числовых типов
n Инкременты и декременты – соответственно, увеличивают и уменьшают значение на 1
l Постфиксная форма: i ++, i --
результатом оператора является прежнее (неизмененное) значение
l Префиксная форма: ++ i, -- i
результатом оператора является новое значение
n Унарные + и -
l Аналогичны случаю, когда первый операнд равен 0
l Если знак + или - находится перед литералом, он может трактоваться как часть литерала
Побитовые операторы примитивных целых типов
n Логические операторы
l & – «и» (and)
1 & 3 -> 1
00000001 & 00000011 -> 00000001
l | – «или» (or)
1 | 3 -> 3
00000001 | 00000011 -> 00000011
l ^ – «исключающее или» (xor)
1 ^ 3 -> 2
00000001 ^ 00000011 -> 00000010
l ~ – побитовое отрицание
~ 1 -> -2
~00000001 -> 11111110
n Вычисления производятся в типе int либо long
Побитовые операторы примитивных целых типов
n Операторы сдвига
l << – сдвиг влево
1 << 2 -> 4
00000001 << 2 -> 00000100
l >> – арифметический сдвиг вправо
4 >> 2 -> 1
00000100 >> 2 -> 00000001
-1 >> 2 -> -1
11111111 >> 2 -> 11111111
l >>> – логический сдвиг вправо
4 >>> 2 -> 1
00000100 >>> 2 -> 00000001
-1 >>> 2 -> 1073741823
11111111 >>> 2 -> 00111111 11111111 11111111 11111111
n Вычисления производятся в типе int либо long
Вопрос 17 Операторы сравнения, логических действий, присваивания и приведения типов для примитивных типов. 25-29 лекция Лексика языка Java
Операторы сравнения примитивных числовых типов
n > и < – строгое сравнение
n >= и <= – нестрогое сравнение
n == – определение равенства
n != – определение неравенства
n Результат – логическое значение: true или false
n Сравнение проводится в наиболее широком типе из типов операндов
Операторы примитивного логического типа
n == – определение равенства
n != – определение неравенства
n ! – отрицание
n & – логическое «и» (and)
n | – логическое «или» (or)
n ^ – логическое «исключающее или» (xor)
n && – условное «и»
(может не вычислять второй операнд)
n || – условное «или»
(может не вычислять второй операнд)
Операторы присваивания примитивных типов
· = – простое присваивание
· Тип выражения справа должен допускать присваивание в переменную слева
· +=, -=, *=, /=, %=, >>=, <<=, >>>=, &=, ^=, |=
· Присваивание с действием
· Выражение a ?= b эквивалентно a = a ? b, но выполняется быстрее
· Типы операндов должны позволять совершить операцию
Преобразование примитивных числовых типов
n Неявное преобразование типов
Преобразование к более широкому типу
n Явное преобразование типов
Преобразование к указанному типу с помощью оператора ( type ) expr
short s1 = 29;
int i1 = s1;
float f1 = i1;
int i2 = 14;
short s2 = (short) i2;
short s = -134;
byte b = (byte) s; // b = 122;
Особенности преобразования примитивных числовых типов
n Более широким считается тип, переменные которого могут принимать большее количество значений
n Вещественные типы считаются шире целочисленных
n Это, естественно, не так
long orig = 0x7effffff00000000L; float fval = orig; long lose = (long)fval; | orig = 9151314438521880576 fval = 9 . 1513144 e 18 lose = 9151314442816847872 |
Вопрос 18 Типы данных и их классификация. Ссылочные типы и их литералы. 8,9,11 лекция Лексика языка Java
Типы данных
n Ссылочные
l Предназначены для работы с объектами
l Переменные содержат ссылки на объекты
l Ссылка – это не указатель!
l Тип переменной определяет контракт доступа к объекту
l Примитивные (простые)
l Предназначены для работы со значениями естественных, простых типов
l Переменные содержат непосредственно значения
Типы данных
Тип данных определяется следующими характеристиками:
n Множество значений
l для примитивных типов – числа, не выходящие за диапазон типа
l для ссылочных типов – ссылки на объекты, контракт которых включает в себя контракт, определяемый типом ссылки
n Возможные операции со значениями
l для примитивных типов – операторы
l для ссылочных типов – действия, входящие в контракт типа (вызов методов и обращение к полям), и операторы
n Форма хранения и представления
l форма хранения определяется реализацией JVM
l JVM гарантирует одинаковое представление, не зависящее от реализации
Ссылочные типы
n К ссылочным типам относятся типы классов (в т.ч. массивов) и интерфейсов
n Переменная ссылочного типа способна содержать ссылку на объект, относящийся к этому типу
n Ссылочный литерал null
Вопрос 19 Операторы для ссылочных типов. 30-32 лекция Лексика языка Java
Операторы ссылочных типов
n new – создание объекта класса
n = – присвоение ссылки
l Тип выражения справа должен допускать присвоение в тип переменной слева
n == и != – сравнение ссылок
l Сравниваются только ссылки, а не состояние объектов!
n . – разыменование ссылки
l reference.method()
l reference.field
n () – вызов метода
n У любого объекта можно вызвать методы, объявленные в классе Object
Преобразование ссылочных типов
· Преобразование типа возможно, только если контракт целевого типа является частью контракта приводимого типа
· Более широким считается тип, переменные которого могут принимать большее количество значений.
· Родительский тип считается более общим (широким), чем дочерний.
· Неявное преобразование типов – преобразование от более узкого к более широкому
· Явное преобразование типов – преобразование от более широкого к более узкому с помощью оператора явного преобразования ( type ) expr
Преобразование и проверка ссылочных типов
Integer i = new Integer (5);
Object o = i ;
i = (Integer) o;
n Если явное преобразование типов невозможно, возникает ошибка java . lang . ClassCastException
n Соответствие типа можно проверить с помощью оператора instanceof, возвращающего true, если тип применим к объекту и false, если нет
n Оператор instanceof не позволяет определить реальный тип объекта, а лишь проверяет его соответствие указанному типу
Integer i = new Integer(5);
Object o = i;
if (o instanceof Integer) {
i = (Integer) o;
...
}
else { ... }
Вопрос 20 Оператор ветвления. Приоритеты операторов. 18,33 лекция Лексика языка Java
Оператор ветвления
n Формат:
<логическое выражение> ? <значение 1> : <значение 2>
double factor = (a > b) ? 1 : 0.7;
n Если логическое выражение истинно, возвращается значение второго операнда, а если ложно – третьего операнда
n Типы второго и третьего операндов должны быть «совместимы»
n Оператор можно применять в выражениях присваивания вместо инструкции ветвления
boolean flag = ...;
...
factor = flag ? 1 : 0.7;
/*
If (flag)
factor = 1;
Else
factor = 0.7;
*/
n Приоритет сверху вниз
n Постфиксные n Унарные n n Создание и приведение n Арифметика n Арифметика n Побитовый сдвиг n Сравнение n Равенство n И (and) n Исключающее ИЛИ (xor) n Включающее ИЛИ (or) n Условное И (and) n Условное ИЛИ (or) n Условный оператор Операторы присваивания | [] . (params) expr++ expr-- ++expr --expr +expr –expr ~ ! new (type)expr * / % + - << >> >>> < > >= <= instanceof == != & ^ | && || ? : = += -= *= /= %= >>= <<= >>>= &= ^= |= |
Вопрос 21 Массивы: особенности, разновидности, объявление и инициализация. 35-38 лекция Лексика языка Java
Массивы
n Массив – упорядоченный набор элементов одного типа
n Элементами могут быть значения простых и ссылочных типов
n Массивы сами по себе являются объектами и наследуют от класса Object
n Доступ к элементам по целочисленному индексу с помощью оператора []
Дата: 2019-07-30, просмотров: 213.