Операторы Java

Операторы Java практически совпадают с операторами C++ и имеют такой же приоритет. Поскольку указатели в Java отсутствуют, то отсутствуют операторы *, &, ->, delete для работы с ними. Операторы работают с базовыми типами и объектами классов-оболочек над базовыми типами. Операторы + и += производят также действия с по конкатенации с операндами типа String. Логические операторы ==, != и оператор присваивания = применимы к операндам любого объектного и базового типов, а также литералам. Применение оператора присваивания
к объектным типам часто приводит к ошибке несовместимости типов, поэтому такие операции необходимо тщательно контролировать.

Операции над числами: +, , *, %, /, ++, –– а также битовые операции &, |, ^, ~ и операции сдвига аналогичны операциям C++. Деление на ноль целочисленного типа вызывает исключительную ситуацию, переполнение не контролируется.

Операции над числами с плавающей запятой практически те же, что и в других алгоритмических языках, но по стандарту IEEE 754 введены понятие бесконечности +Infinity и Infinity и значение NaN (Not a Number), которое может быть получено, например, при извлечении квадратного корня из отрицательного числа.

Арифметические операторы

+

Сложение

/

Деление (или деление нацело для целочисленных значений)

+=

Сложение (с присваиванием)

/=

Деление (с присваиванием)

Бинарное вычитание и унарное изменение знака

%

Остаток от деления (деление по модулю)

–=

Вычитание
(с присваиванием)

%=

Остаток от деления (с присваиванием)

*

Умножение

++

Инкремент (увеличение значения на единицу)

*=

Умножение (с присваиванием)

––

Декремент (уменьшение значения на единицу)

Битовые операторы над целочисленными типами

|

Или

>>

Сдвиг вправо

|=

Или (с присваиванием)

>>=

Сдвиг вправо (с присваиванием)

&

И

>>>

Сдвиг вправо с появлением нулей

&=

И (c присваиванием)

>>>=

Сдвиг вправо с появлением нулей и присваиванием

^

Исключающее или

<<

Сдвиг влево

^=

Исключающее или

(c присваиванием)

<<=

Сдвиг влево с присваиванием

~

Унарное отрицание

 

Операторы отношения

<

Меньше

>

Больше

<=

Меньше либо равно

>=

Больше либо равно

==

Равно

!=

Не равно

Эти операторы применяются для сравнения символов, целых и вещественных чисел, а также для сравнения ссылок при работе с объектами.

Логические операторы

||

Или

&&

И

!

Унарное отрицание

 

К логическим операторам относится также оператор определения принадлежности типу instanceof и тернарный оператор ?: (if-then-else).

Логические операции выполняются только над значениями типов boolean и Boolean (true или false).

// пример # 2 : битовые операторы и %: DemoOperators.java

package chapt02;

public class DemoOperators {

public static void main(String[] args) {

System.out.println("5%1=" + 5%1 + " 5%2=" + 5%2);

int b1 = 0xe;//14 или 1110

int b2 = 0x9;//9 или 1001

int i = 0;

System.out.println(b1 + "|" + b2 + " = " + (b1|b2));

System.out.println(b1 + "&" + b2 + " = " + (b1&b2));

System.out.println(b1 + "^" + b2 + " = " + (b1^b2));

System.out.println( "~" + b2 + " = " + ~b2);

System.out.println(b1 + ">>" + ++i + " = " + (b1>>i));

System.out.println(b1 + "<<" + i + " = " + (b1<<i++));

System.out.println(b1 + ">>>" + i +" = " + (b1>>>i));

}

}

Результатом выполнения данного кода будет:

5%1=0 5%2=1

14|9 = 15

14&9 = 8

14^9 = 7

~9 = -10

14>>1 = 7

14<<1 = 28

14>>>2 = 3

Тернарный оператор "?" используется в выражениях вида:

booleanзначение ? первое : второе

Если booleanзначение равно true, вычисляется значение выражения первое и оно становится результатом всего оператора, иначе результатом является значение выражения второе.

Оператор instanceof возвращает значение true, если объект является экземпляром данного типа. Например, для иерархии наследования:

class Course extends Object {}

class BaseCourse extends Course {}

class FreeCourse extends BaseCourse {}

clip_image001

class OptionalCourse extends Course {}

Рис. 2.2. Иерархия наследования

применение оператора instanceof может выглядеть следующим образом при вызове метода doLogic(Course c):

void doLogic(Course c) {

if (c instanceof BaseCourse) {/*реализация для BaseCourse и

FreeCourse*/

} else if (c instanceof OptionalCourse) {/*реализация для

OptionalCourse*/

} else {/*реализация для Course*/}

}

Результатом действия оператора instanceof будет истина, если объект является объектом данного типа или одного из его подклассов, но не наоборот. Проверка на принадлежность объекта к классу Object всегда даст истину, поскольку любой класс является наследником класса Object. Результат применения этого оператора по отношению к ссылке на значение null всегда ложь, потому что null нельзя причислить к какому-либо типу. В то же время литерал null можно передавать в методы по ссылке на любой объектный тип и использовать в качестве возвращаемого значения. Базовому типу значение null присвоить нельзя, так же как использовать ссылку на базовый тип в операторе instanceof.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100