Ocновные операции языка
Переменные и литералы могут участвовать в операциях (из которых, в свою очередь могут строиться сложные выражения). Рассмотрим простейшие операции языка Java.
Математические операции
Операция | Использование | Описание |
+ | op1 + op2 | Складывает op1 и op2 |
- | op1 - op2 | Вычитает op1 из op2 |
* | op1 * op2 | Умножает op1 на op2 |
/ | op1 / op2 | Делит op1 на op2 |
% | op1 % op2 | Вычисляет остаток от деления op1 на op2 |
Операции сравнения, результатом является значение логического типа: true (истина) или false (ложь)
Операция | Использование | Возвращает истину(true), если |
> | op1 > op2 | op1 больше чем op2 |
>= | op1 >= op2 | op1 больше или равен op2 |
< | op1 < op2 | op1 меньше op2 |
<= | op1 <= op2 | op1 меньше или равно op2 |
== | op1 == op2 | op1 и op2 равны |
!= | op1 != op2 | op1 и op2 не равны |
Логические операции
Операция | Использование | Возвращает истину(true), если |
&& | op1 && op2 | op1 и op2 оба истины (конъюнкция) |
|| | op1 || op2 | один из op1 или op2 истинен (дизъюкция) |
! | !op | op – ложь (отрицание) |
^ | op1 ^ op2 | op1 и op2 различны (исключающее или) |
Операции && и || отличаются тем, что не обязательно вычисляют значение второго операнда. Например, && вычисляет значение первого операнда и, если оно ложно, сразу возвращает false, а || возвращает true сразу, если видит, что первый операнд – истина. В Java есть аналогичные по действию операции & и |, они вычисляют значения обоих операндов, прежде чем произвести над ними операцию.
Операции сдвига
(работают с битовым представлением первого операнда)
Операция | Использование | Описание |
>> | op1 >> op2 | сдвигает биты op1 вправо на op2 |
<< | op1 << op2 | сдвигает биты op1 влево на op2 |
>>> | op1 >>> op2 | сдвигает биты op1 вправо на op2 (без учёта знака) |
Битовые операции
(работают с битовым представлением операндов)
Операция | Использование | Описание |
& | op1 & op2 | побитовое и |
| | op1 | op2 | побитовое или |
^ | op1 ^ op2 | побитовое исключающее или |
~ | ~op2 | побитовое дополнение |
Операция ? :
Операция ? : тернарная, то есть имеет три операнда. Первый операнд – условие, выражение логического типа. Второй и третий операнды – выражения любого другого типа. Операция работает следующим образом: если условие равно true, она возвращает в качестве результата свой второй операнд, а если false, то третий.
Например, выражение
(5 > 3)? 7+1: 2*2
будет иметь значение 8, а выражение
(5 == 3)? 7+1: 2*2
будет иметь значение 4. Эта запись выглядит не очень наглядно, но программисты часто используют ее для сокращения своего кода. Так, вместо последовательности команд:
if (x > 0) y = 45 + a*2; // оператор if рассматривается ниже
else y = 45 - b*3;
можно написать:
y = 45 + ((x > 0)? a*2: -b*3);
Оператор присваивания
После того, как переменная описана, с ней можно работать в программе. В частности, ей можно присвоить значение соответствующего типа. Тогда в дальнейшем при использовании этой переменной в каком-либо выражении вместо нее будет автоматически подставляться это текущее значение.
Значение связывается с переменной с помощью оператора присваивания. В языке Java он записывается простым знаком равенства:
переменная = выражение;
Слева от оператора присваивания всегда указывается переменная. Выражение справа должно соответствовать переменной по типу. Оно может представлять собой просто литерал (например, число или символ):
x = 7; // переменной x присваивается значение 7
letter = 'Q'; // переменной letter присваивается значение 'Q'
В общем случае выражение – это то, что может быть вычислено (например, результат математической операции или результат, возвращаемый некоторым методом):
a = 7.5 + 2.4; // переменной a присваивается 9.9 как результат вычислений
В выражении наряду с литералами могут участвовать другие переменные. Вместо них подставляется их текущее значение. В результате выполнения команды:
b = a + 1;
переменная b примет значение 10.9.
Итак, оператор присваивания действует следующим образом. Сначала вычисляется значение выражения в правой части, а затем полученный результат присваивается переменной, указанной в левой части. Возможна даже следующая ситуация:
x = x + 4;
Эта команда увеличивает текущее значение целочисленной переменной x на 4.
А следующие команды записаны неправильно и работать не будут:
5 = x + 7; // слева должна стоять переменная
x + 3 = 14; // слева должна стоять просто одна переменная
x = 4.5; // переменная x может принимать только целочисленные значения
Eclipse попытается указать на ошибку в этих строчках еще до выполнения программы, расставив предупреждающие знаки на полях редактора кода. Вы можете посмотреть, как он это делает.
Приведение типов
Когда переменной одного типа присваивается величина другого типа, происходит используется приведение (преобразование) типов. Для числовых типов (byte, short, int, long, float, double, char) оно происходит автоматически, если тип изменяемой переменной может «вместить» значение другого типа.
Например, если переменной типа int присвоить значение типа byte, автоматически произойдет преобразование типа byte в тип int. Аналогично тип float может быть приведен к типу double и т.п.
При попытке присвоить переменной менее точного типа (например, byte) значение более точного типа (например, int) компилятор выдаст сообщение об ошибке.
Для приведения типа можно использовать оператор приведения типа – перед выражением, для которого мы хотим выполнить приведение типа, ставятся круглые скобки с типом, к которому выполняется приведение, внутри скобок. При приведении целого типа большей точности к целому типу меньшей точности может быть выполнено деление по модулю на допустимый диапазон типа, к которому осуществляется приведение, а при приведении выражения типа double к выражению типа float будет уменьшена точность представления выражения.
long j = (long)1.0; //используем оператор приведения типа к long, j = 1
char ch = (char)1001; //используем оператор приведения типа к char, ch = 'd'
byte b2 = (byte)(100); //используем оператор приведения типа от int к byte, b2 = 100
byte b3 = (byte)(100 * 2); //внимание! происходит деление по модулю, b3 = -56
Ошибка несовпадения типов часто возникает применительно к действительным литералам. Например, нельзя выполнить присваивание
a = 7.5 + 2.4;
если переменная a имеет тип float, поскольку литералы 7.5 и 2.4 считаются относящимся к типу double. Чтобы не было ошибки, необходимо использовать приведение типов:
a = (float)(7.5 + 2.4);
или указать, что литералы также относятся к типу float:
a = 7.5f + 2.4f; // это тоже правильная команда
Практически для каждой бинарной операции существует своя разновидность оператора присваивания. Например, для операции сложения + существует унарный оператор присваивания +=, который увеличивает значение операнда на заданную величину:
x += 8; // то же самое, что x = x + 8 (x увеличивается на 8)
Аналогично для других операций: операторы *=, -=, /=, %=, &= ^= и т.д:
x *= 3; // то же самое, что x = x * 3 (x увеличивается в 3 раза)
b1 ^= b2; // то же самое, что b1 = b1 ^ b2
Дата добавления: 2017-01-26; просмотров: 1761;