Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции Java / 02. Лексика языка Java.pptx

.pdf
Скачиваний:
149
Добавлен:
16.03.2015
Размер:
226.38 Кб
Скачать

Операторы сравнения примитивных числовых типов

n> и < – строгое сравнение

n>= и <= – нестрогое сравнение

n== – определение равенства

n!= – определение неравенства

nРезультат – логическое значение: true

или false

nСравнение проводится в наиболее широком типе из типов операндов

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

21

Операторы примитивного логического типа

n== – определение равенства

n!= – определение неравенства

n! – отрицание

n& – логическое «и» (and)

n| – логическое «или» (or)

n^ – логическое «исключающее или» (xor)

n&& – условное «и» (может не вычислять второй операнд)

n|| – условное «или»

(может не вычислять второй операнд)

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

22

Операторы присваивания примитивных типов

n = – простое присваивание

Тип выражения справа должен допускать присваивание в переменную слева

n +=, -=, *=, /=, %=, >>=, <<=, >>>=, &=, ^=, |=

Присваивание с действием

Выражение a ?= b эквивалентно a = a ? b, но выполняется быстрее

Типы операндов должны позволять совершить операцию

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

23

Преобразование примитивных числовых типов

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;

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

24

Особенности преобразования примитивных числовых типов

nБолее широким считается тип, переменные которого могут принимать большее количество значений

nВещественные типы считаются шире целочисленных

nЭто, естественно, не так

long orig = 0x7effffff00000000L; float fval = orig;

long lose = (long)fval;

orig = 9151314438521880576 fval = 9.1513144e18

lose = 9151314442816847872

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

25

Операторы ссылочных типов

n n

new – создание объекта класса = – присвоение ссылки

Тип выражения справа должен допускать присвоение в тип переменной слева

n == и != – сравнение ссылок

Сравниваются только ссылки, а не состояние объектов!

n . – разыменование ссылки

reference.method()

reference.field

n() – вызов метода

nУ любого объекта можно вызвать методы, объявленные в классе Object

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

26

Преобразование ссылочных типов

nПреобразование типа возможно, только если контракт целевого типа является частью контракта приводимого типа

nБолее широким считается тип, переменные которого могут принимать большее количество значений. Родительский тип считается более общим (широким), чем дочерний.

nНеявное преобразование типов – преобразование от более узкого к более широкому

nЯвное преобразование типов – преобразование от более широкого к более узкому с помощью оператора явного преобразования (type)expr

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

27

Преобразование и проверка ссылочных типов

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 { ... }

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

28

Оператор ветвления

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;

*/

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

29

Работа со строками

nДля работы со строками существуют специальные классы String и StringBuffer

(StringBuilder с Java5)

nКаждый строковый литерал порождает экземпляр класса String

nЗначение любого типа может быть приведено к строке

nЕсли хотя бы один из операндов оператора + является ссылкой на строку, то остальные

операнды также приводятся к строке, а оператор трактуется как конкатенация строк

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

30