Логические операции в java. поразрядные операции в java

Содержание:

Практическое применение побитовых операций

Побитовые операции имеют довольно широкое практическое применение, рассмотрим некоторые случаи:

4.3. Шифрование числа

Операция XOR при применении два раза к одному и тому же битовому массиву восстанавливает ее исходное значение. Это можно использовать при шифровании данных при передаче по сети: 

  C = A ^ B

  A = C ^ B 

Представьте, что необходимо отправить в сообщении число 560 — пин-код от банковской  карты. Если злоумышленник перехватит сообщение, то узнает пин-код и сможет воспользоваться им. Только отправитель и получатель могут знать пин-код. Чтобы этого не произошло, придумаем какое-то число — маску и сообщим его получателю заранее. Перед отправкой пин-кода, зашифруем его — применим побитовую операцию XOR: . И результат отправим. Если злоумышленник и перехватит сообщение, он не будет знать как его расшифровать. Адресат получает сообщение, расшифровывает пин-код с помощью имеющейся маски: .

Следующий код иллюстрирует этот пример:

4.4. Наложение маски

Маска позволяет получать значения только определенных битов в последовательности. Например, у нас есть маска 00100100. Она позволяет нам получать из последовательности только те биты, которые в ней установлены. В данном случае это 3-й и 7-й разряд. Для этого достаточно выполнить побитовое AND с нашей маской и выбранным числом:

Битовые операции

Битовые операции в Java используются редко, но знать их нужно. Работают они так же, как и в Javascript.

Битовые операции в Java:

  • Битовый сдвиг влево
    <<
  • Битовый знаковый сдвиг вправо
    >>
  • Беззнаковый битовый сдвиг вправо
    >>>. Он отличается от
    >>  тем, что ставит 0 в самую левую позицию, а
    >>  ставит то, что было в знаковом бите.
  • Инвертация бит
    ~  меняет 0 на 1 и 1 на 0 во всех битах.
  • Битовый 
    &  применяет побитовую операцию И
  • Битовый
    |  применяет побитовую операцию ИЛИ
  • Битовый
    ^  применяет XOR (исключающее или)

Эти операнды работают так же, как и из аналоги в других языках программирования. Вряд ли имеет смысл их особенно сильно рассматривать.

Main.java

Java

class Main {
public static void main(String[] args) {
int n1 = 4; // 100 в двоичной системе
System.out.println(«n1 >> 1 = » + (n1 >> 1)); //2 или 10
// в двоичной системе.

System.out.println(«n1 << 1 = » + (n1 << 1)); ;// 8 или 100
// в двоичной системе.

System.out.println(«0b101 & 0b100 = » + (0b101 & 0b100)); // 4 (0b100)
System.out.println(«0b001 | 0b100 = » + (0b001 | 0b100)); // 5 (0b101)
System.out.println(«0b1110 ^ 0b1011 = » + (0b1110 ^ 0b1011)); //5 (0b101);

System.out.println(«-2 >> 1 = » + (-2 >> 1)); // -1 (единица со знака
// сдвинется вправо, так что знак не поменяется)

System.out.println(«-2 >>> 1= » + (-2 >>> 1)); // 2147483647 (сменит
// знак, так как левый бит заполнится нулём).

System.out.println(«~1 = » + ~1) ; // -2 (0b000…001
// превратится в 0b1111..10)

}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

classMain{

publicstaticvoidmain(Stringargs){

intn1=4;// 100 в двоичной системе

System.out.println(«n1 >> 1 = «+(n1>>1));//2 или 10

// в двоичной системе.

System.out.println(«n1 << 1 = «+(n1<<1));;// 8 или 100

// в двоичной системе.

System.out.println(«0b101 & 0b100 = «+(0b101&0b100));// 4  (0b100)

System.out.println(«0b001 | 0b100 = «+(0b001|0b100));// 5  (0b101)

System.out.println(«0b1110 ^ 0b1011 = «+(0b1110^0b1011));//5 (0b101);

System.out.println(«-2 >> 1 = «+(-2>>1));// -1 (единица со знака

// сдвинется вправо, так что знак не поменяется)

System.out.println(«-2 >>> 1= «+(-2>>>1));// 2147483647 (сменит

// знак, так как левый бит заполнится нулём).

System.out.println(«~1 = «+~1);// -2 (0b000…001

// превратится в 0b1111..10)

}

}

Полные и сокращённые версии AND и OR

&& и || называются сокращёнными логическими операторами AND и OR соответственно, или операторами короткой схемы вычислений. В спецификации Java их ещё зовут условными. Значения их операндов могут быть только булева типа.

В отличие от двойных, одиночные & и | называются операторами полной схемы вычислений. Значения их операндов могут быть как только булевыми, так и только целочисленными (вместе с оператором ^ они используются в побитовых операциях).

В чём разница

В том, что для операторов & и | всегда вычисляются значения обоих операндов, а при работе операторов && и || второй операнд вычисляется только по необходимости.

То есть иногда результат выражения однозначно определён уже по первому операнду:

  1. Если первый операнд && равен false, то второй не вычисляется, так как уже понятно, что результат всего выражения будет false.
  2. Если первый операнд || равен true, то второй не вычисляется, так как уже понятно, что || вернёт true.

&& и || используют как операторы булевой логики. Они оперируют значениями только булева типа и применяются только в логических выражениях.

Как использовать

&& и || позволяют экономить вычисления (применять короткую схему) и помогают избегать ошибок. Как это делается?

Начнём с оператора &&. Приведём фрагмент из таблицы выше:

Логический оператор Обозначение в Java Выражение Результат
«И» (AND): конъюнкция, логическое умножение && true && truefalse && falsetrue && falsefalse && true truefalsefalsefalse

Рассмотрим выражение: (3 > 4) AND (5 > 4)

Мы видим, что операнд слева от оператора AND равен false. Смотрим на таблицу выше — и понимаем, что вычислять второй операнд бессмысленно, так как оператор AND уже точно вернёт false.

Именно по такой логике и работает оператор короткой схемы вычислений &&. Если выражение слева от него равно false, то выражение справа вычисляться не будет.

Так же и с оператором ||: если выражение слева от него равно true, то выражение справа не вычисляется, так как результат операции || всё равно будет true.

В большинстве случае применяют именно && и ||. При верном использовании они избавляют Java от ненужных вычислений и страхуют от некоторых ошибок.

Первый пример

Если вместо оператора && мы используем &, то получим ошибку (исключение) java.lang.ArithmeticException: / by zero:

Ошибка возникнет тогда, когда Java попытается вычислить второй аргумент логического выражения, если первый равнялся false.

Иными словами, мы узнали, что b равно 0 (выражение b != 0 вернуло false) — и идём делить на b (делить на ноль), вычисляя значение второго операнда (a/b > 0).

Второй пример

Код выше выводит в консоль длину строки str, в которой есть хотя бы один символ. А если строка пуста или её значение равно null (то есть строковая переменная ни на что не указывает), в консоль выводится сообщение: «Тут нечего считать!»

Мы выбрали оператор короткой схемы вычислений && — и это правильно!

А вот если бы вместо этого использовали оператор полной схемы &, то наш код работал бы не так, как надо.

Мы получали бы ошибку NullPointerException каждый раз, когда вызываем метод для строковой переменной со значением null.

Посмотрим, что происходило бы при вычислении условия блока if:

  1. str != null & str.length() > 0
  2. null != null & str.length() > 0
  3. false & str.length() > 0 // тут возникает ошибка

Сперва вычисляется первый аргумент логического выражения, а именно str != null (иными словами, получаем ответ на вопрос «Строковая переменная не равна null?»). Получили false, значит всё же равна.

Дальше Java должна вычислить второй аргумент логического выражения, а именно str.length() > 0 (иными словами — проверяется «Число символов строки > 0?»).

Каков синтаксис Java?

Прежде чем мы погрузимся в самую суть этого руководства по Java для начинающих, стоит уделить некоторое время изучению синтаксиса Java.

Синтаксис Java относится к способу написания конкретных алгоритмов. Java очень принципиален в этом вопросе, и, если вы не пишете код определенным образом, то ваша программа не будет работать!

На самом деле я написал целую статью о синтаксисе Java для разработки Android, кратко перечислю особенности синтаксиса:

  • Большинство строк должно заканчиваться точкой с запятой «;».
  • Исключение составляет строка, открывающая новый блок кода. Она должна начинаться открытой фигурной скобкой «{». В качестве альтернативы эту открытую скобку можно поместить на новую строку под оператором. Блоки кода – это фрагменты кода, которые выполняют определенные, отдельные задачи.
  • Код внутри блока кода должен иметь отступ, чтобы отделить его от остальных.
  • Открытые блоки кода должны быть закрыты закрывающей фигурной скобкой «}».
  • Комментарии – это строки, которым предшествуют символы «//».

Если вы нажимаете кнопку «запустить» или «скомпилировать» и получаете ошибку, то есть большая вероятность, что вы где-то пропустили точку с запятой!

Вы никогда не перестанете делать это, и это никогда не перестанет вас раздражать. Расслабьтесь!

С этими знаниями мы сможем глубже погрузиться в руководство по Java!

Где можно запускать Java-код

Поэто­му запус­кать код на Java мож­но вез­де, для чего уже была раз­ра­бо­та­на JVM, то есть вир­ту­аль­ная маши­на Java. Например:

  • уль­тра­мощ­ные серверы,
  • ком­пью­те­ры,
  • смарт­фо­ны,
  • кно­поч­ные телефоны,
  • робо­ты и мик­ро­кон­трол­ле­ры типа Arduino, Raspberry Pi и мно­гих других,
  • фитнес-браслеты,
  • GPS-трекеры,
  • умные часы,
  • умные теле­ви­зо­ры, холо­диль­ни­ки, мик­ро­вол­нов­ки, чай­ни­ки и про­чие домаш­ние гаджеты,
  • смарт-карты для досту­па в помещения.

Пред­ставь­те такую ситу­а­цию: вы напи­са­ли Java-программу, кото­рая сле­дит за сво­бод­ным местом на дис­ке, и как толь­ко его ста­но­вит­ся мень­ше 20% — выво­дит сооб­ще­ние, мол, уда­ли ненуж­ные фай­лы. Теперь вы може­те запу­стить эту про­грам­му вез­де, где есть JVM. Она сама раз­бе­рёт­ся с кодом, пой­мёт, для како­го про­цес­со­ра она это дела­ет, и запу­стит вашу про­грам­му. В резуль­та­те один и тот же код будет сле­дить за сво­бод­ным местом на ком­пью­те­ре, кно­поч­ном теле­фоне, смарт­фоне, план­ше­те, умной мик­ро­вол­нов­ке или домаш­ней сигнализации.

Ссылочный тип данных. (Reference)

Ссылочным типом называются тип, для которого в ячейке памяти содержится не сами данные, а только адреса этих данных, то есть ссылки на данные.

Ссылочные типы  в языке Java включают:

    • Массивы
    • Классы
    • Интерфейсы
    • Перечисления
Свойства ссылочного типа данных:

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

Возьмем примитивный тип int и рассмотрим следующий код:

int a=5;    // объявляем первую переменную и инициализируем ее
int b=a;    // объявляем вторую переменную, далее присваиваем b=a.
            //В этой операции выполняется копирование значения ячейки а в ячейку b
a=3;        // меняем значение первой переменной
// выводим значение переменной a
System.out.println(“a= “ + a);         // будетвыведено  a= 3
// выводим значение переменной b
System.out.println(“b= “ + b);         // будет выведено b= 5

       Из данного примера следует, что при выполнении операции присвоения для переменных, имеющих примитивный тип, выполняется копирование данных из одной ячейки памяти в другую.

      Выполним операцию присвоения (копирования) для ссылочных переменных. Для этого напишем простой класс Point -точка на плоскости, имеющая координаты x и y.

public static class Point{
    public   int x; //координататочки x
    public   inty; //координата тоски y
//конструктор
Point(int X, int Y) {
    x=X;
    y=Y;
  }
}

Создадим несколько объектов класса Point  и выполним операцию присвоения. 

//cоздаем объект – первую точку
//при выполнении данной операции будет
//создана переменная объектного типа p1,
//которая будет содержать адрес объекта 
Point p1 = new Point(1,1);
//создаем переменную p2 и выполняем 
//операцию присваивания
Point p2=p1;
//меняем координату x первого объекта
p1.x=7;
//выводим координаты первого и второго объекта
System.out.println("p1.x="+ p1.x);
System.out.println("p1.y="+ p1.y);
System.out.println("p2.x="+ p2.x);
System.out.println("p3.y="+ p2.y);
System.out.println("---------");
//создаем переменную p3 и выполняем
Point p3 = null;
//создаем третий объект
p3= new Point(3,3);
//выполняем операцию присваивания
//теперь все переменные указывают на 
//третий объект
p2=p3;
p1=p3;
System.out.println("p3.x="+ p3.x);
System.out.println("p3.y="+ p3.y);
//выводим коорлинаты
System.out.println("---------");
System.out.println("p1.x="+ p1.x);
System.out.println("p1.y="+ p1.y);
System.out.println("p2.x="+ p2.x);
System.out.println("p3.y="+ p2.y);
System.out.println("---------");

буудет выведено:

p1.x=7p1.y=1p2.x=7p3.y=1———p3.x=3p3.y=3———p1.x=3p1.y=3p2.x=3p3.y=3———

Из данного примера следует, что при выполнении операции присвоения применительно к  ссылочным переменным  копируются адреса,  а не сами данные. В данном примере мы получили, что все объектные переменные ссылаются на третий объект. Первый объект остался существовать, но на него никто не ссылается. Более того, адрес первого объекта нигде не сохранился, и поэтому это потерянный объект, другими словами «мусор», который только занимает память.

Математика

Float или Double?

Программисты часто не могут выбрать необходимую точность для чисел с плавающей запятой. Float требует всего 4 байта, но имеет только 7 значащих цифр, а Double в два раза точнее (15 цифр), но в два раза прожорливее.

Фактически, большинство процессоров могут одинаково эффективно работать как с Float, так и с Double, поэтому воспользуйтесь рекомендацией Бьорна Страуструпа (автор языка С++):

Проверка на нечетность

Можно ли использовать этот код для точного определения нечетного числа?

Надеюсь, вы заметили хитрость. Если мы решим таким образом проверить отрицательное нечетное число (например, -5), остаток от деления не будет равен единице, поэтому воспользуйтесь более точным методом:

Он не только решает проблему отрицательных чисел, но и работает более производительно, чем предыдущий метод. Арифметические и логические операции выполняются намного быстрее, чем умножение и деление.

Приоритет операторов в Java

Приоритет операторов определяет группирование терминов в выражении. Это влияет как вычисляется выражение. Некоторые операторы имеют более высокий приоритет, чем другие; например оператор умножения имеет более высокий приоритет, чем оператор сложения:

Например, x = 7 + 3 * 2. Здесь x присваивается значение 13, не 20, потому что оператор «*» имеет более высокий приоритет, чем «+», так что сначала перемножается «3 * 2», а затем добавляется «7».

В таблице операторы с наивысшим приоритетом размещаются в верхней части, и уровень приоритета снижается к нижней части таблицы. В выражении высокий приоритет операторов в Java будет оцениваться слева направо.

Основные математические функции

Java.lang.Math содержит набор базовых математических функций для получения абсолютного значения, наибольшего и наименьшего из двух значений, округления значений, случайных значений и т. д.

Math.abs()

Функция Math.abs() возвращает абсолютное положительное значение переданного ей параметра. Если значение параметра является отрицательным, знак “-” удаляется и возвращается положительное значение, соответствующее отрицательному значению без знака. Вот два примера:

int abs1 = Math.abs(10);  // abs1 = 10

int abs2 = Math.abs(-20); // abs2 = 20

Абсолютное значение 10 равно 10. Абсолютное значение -20 равно 20.

Метод Math.abs() представлен в 4 версиях:

Math.abs(int)
Math.abs(long)
Math.abs(float)
Math.abs(double)

Какой из этих методов вызывается, зависит от типа параметра, передаваемого методу Math.abs().

Math.ceil()

Функция округляет значение с плавающей запятой до ближайшего целого числа. Округленное значение возвращается как двойное. Вот пример:

double ceil = Math.ceil(7.343);  // ceil = 8.0

После выполнения этого Java-кода переменная ceil будет содержать значение 8.0.

Math.floor()

Функция Math.floor() округляет значение с плавающей запятой до ближайшего целочисленного значения. Округленное значение возвращается как двойное. Вот пример:

double floor = Math.floor(7.343);  // floor = 7.0

После выполнения ceil будет содержать значение 8.0.

Math.floorDiv()

Метод Math.floorDiv() делит одно целое число (int или long) на другое и округляет результат до ближайшего целочисленного значения. Если результат положительный, эффект такой же, как при использовании оператора “/” (деления), описанного ранее в этом тексте.

Однако, если результат отрицательный, результат не тот же. С помощью оператора “/” дроби просто усекаются. Для положительных чисел это соответствует округлению в меньшую сторону, для отрицательных – в большую. Метод floorDiv() округляет до ближайшего отрицательного целого числа, вместо того, которое будет происходить при усечении дроби.

Вот пример:

double result3 = Math.floorDiv(-100,9);
System.out.println("result3: " + result3);

double result4 = -100 / 9;
System.out.println("result4: " + result4);

Выходные данные:

result3: -12.0
result4: -11.0

Это показывает разницу между оператором “/” и Math.floorDiv().

Math.min()

Метод Math.min() возвращает наименьшее из двух значений, переданных ему в качестве параметра:

int min = Math.min(10, 20);

После выполнения этого кода переменная min будет содержать значение 10.

Math.max()

Метод Math.max() возвращает наибольшее из двух значений, переданных ему в качестве параметра:

int max = Math.max(10, 20);

После выполнения этого кода переменная max будет содержать значение 20.

Пользуйтесь несколькими обучающими ресурсами

Вам потребуется множество инструментов для достижения цели. Вот полезные подборки для успешного обучения.

1. Только практика: CodeAcademy

Это, пожалуй, одна из самых известных онлайн-платформ для изучения разных языков программирования. И, конечно же, тут есть специальный раздел для изучающих Java. Здесь вы с самого первого урока начнете писать код. Если задание покажется слишком сложным (а для новичков — это совершенно нормально), то можете воспользоваться полезными подсказками. Логика обучения проста: читаете задание, пишите код, запускаете его, смотрите результат, переходите к следующему уроку. Задания постепенно усложняются до тех пор, пока вы не научитесь писать код с чистого листа. Есть очень полезный раздел FAQ и возможность обсуждения задания с другими учениками.

Данный курс может стать отличным подспорьем при изучении Java. Как уже было сказано выше, для успешного освоения Java нужно писать много кода.

2. Играйте и программируйте с нуля: CodeGym.cc

Существуют онлайн-курсы по Java с необычной особенностью — игрофикацией. Сейчас многие платформы стали внедрять обучение в формате игры. Так вы получаете должную мотивацию, наглядно отслеживаете успехи и легче достигаете нужной цели.

В CodeGym вы начинаете с нулевого уровня. Процесс обучения проходит в футуристической вселенной с космическими путешествиями, роботами и прочими классными штуками. Ваша цель — пройти 4 обучающих квеста и «прокачать» своего персонажа (робота). Каждый квест состоит из 10 уровней. В каждом уровне по 10–12 уроков, которые вам объясняют члены экипажа космического корабля. Урок сводится к минимуму теории и набору заданий с мгновенной проверкой, а также подсказками по улучшению кода. Вы сразу начинаете писать код и решаете простейшие задачи до тех пор, пока не будете готовы к более сложным и масштабным проектам по разработке.

Здесь вы можете не «застревать» на какой-то теме, а переходить к изучению следующей и возвращаться к проблемной задаче позже. В курсе имеется невероятное количество задач — более 1200. Это количество равнозначно примерно 300–500 часам написания кода.

3. Конкурсы по программированию: Codewars

Есть еще одна онлайн-платформа с акцентом на практику. Хотя, конечно, она больше подходит для тех, у кого за плечами есть опыт в разработке. Codewars позволяет отточить свои навыки в каком-то языке программирования с помощью обучающих задач (ката).

Вы можете писать свой код в браузере и пошагово проверять его в тестовых сценариях. Также можете сравнивать свой код с чужим, расширять базу знаний и обсуждать лучшие варианты. Каждое задание представляет собой конкурс с другими программистами, и ему присваивается свой рейтинг. Как только вы научитесь решать не самые простые задачи, то сможете отточить свои навыки и поучаствовать в более сложных конкурсах. Основное отличие данной платформы — здесь вы можете учиться и практиковаться в группе.

4. Слушайте лекции профессионалов: EdX

EdX — это образовательная платформа, созданная Гарвардским университетом и MIT. В ней представлено множество предметов, в том числе, программирование на Java и смежные области. EdX содержит массу утвержденных вводных курсов и сертифицированных программ, проводимых университетами.

Хотите быть в курсе последних новостей, обзоров и обновлений в Java­-мире? И это правильно. Java постоянно развивается, обновляется и добавляет новые возможности. Не забывайте каждый день читать полезные статьи по Java. 

Помните совет о том, чтобы вступить в профильные сообщества для более эффективного обучения? Можете задавать свои вопросы в разделе Java на Stack Overflow или Coderanch. Кроме того, есть как минимум три крупных сообщества на Reddit (learnprogramming, java и learnjava), где вы познакомитесь с полезными подсказками по изучению как всего программирования, так и отдельно взятого языка. Если нужна более конкретная информация (например, как улучшить код в каких-то заданиях), то почитайте специальный раздел помощи на CodeGym –другие студенты и «наставники по разработке» подскажут вам решение любой задачи. И, наконец, есть еще крупное Java-сообщество на Oracle. Оно рассчитано на новичков и продвинутых разработчиков.

Быть разработчиком — это постоянно совершенствоваться и получать новые знания. Если вы изначально разовьете навык самообразования, то гарантированно добьетесь успехов. Итак, вы готовы начать?

Перевод статьи John SelawskyHow to learn to code in Java: why you should and where to start

Логическое ИЛИ (||)

Оператор логическое ИЛИ вычисляет дизъюнкцию (логическим сложением) двух операндов. Если хотя бы один или оба операнда преобразуются в , он возвращает или непреобразованное значение. Если же оба операнда преобразуются в , он возвращает или непреобразованное значение.

Логическое ИЛИ , как и логическое И поддерживает сокращенные вычисления.

В этом прмере правый операнд не оценивается, потому что левый эквивалентен значению , например:

Выполнить код »
Скрыть результаты

Если же левый операнд имеет значение или значение, которое может быть преобразовано в , оператор переходит к вычислению значения правого операнда, и возвращает его значение:

Выполнить код »
Скрыть результаты

Логическое ИЛИ вычисляет операнды слева направо до первого истинного значения и возвращает его, а если все значения ложные – то возвращает последнее значение.

Где нужны логические операторы

Если коротко, то в условных выражениях, которые могут включать в себя и операторы сравнения (<, >, <=, >=, ==, !=). При вычислении они возвращают значение булева типа.

Условные выражения, в свою очередь, применяются в операторах ветвления (if-else, switch, тернарном). Подробнее об этих операторах тут.

Как применять

Допустим, мы хотим проверить, что значение переменной a больше значений в переменных b и c. То есть сравнить операнд a с двумя другими. Нам поможет логический оператор && (И).

Логический оператор && (И) возвращает true, если слева и справа от него стоят значения true, а иначе — false.

Иными словами, если оба логических высказывания истинны, то и операция && (И) возвращает истину.

Первый пример

Как вычисляется значение выражения (a > b) && (a > c):

Сначала проверяется условие (a > b). Оно вернёт true, так как 6 больше 4. Далее проверяется условие (a > c), которое также вернёт true, ведь 6 больше 3.

Теперь у нас с двух сторон от логического оператора && стоят значения true.

По определению выше или по таблице ещё выше, результат вычисления логического выражения (true && true) равен true.

Второй пример

Результат операции (a > b) вернёт true, так как 6 больше 4, а операция (a > c) уже вернёт false, так как 6 не больше 7.

Значит, слева от логического оператора && стоит true, а справа — false. Следовательно, результат вычисления логического выражения (мы присвоили его булевой переменной d) будет false.

Третий пример

Результат операции сравнения (a > b) равен false, а что вернёт операция (a > c), уже значения не имеет (смотрите определение выше) — результат вычисления логического выражения (мы присвоили его булевой переменной d) будет равен false.

Прочие операторы

Есть несколько других операторов, поддерживаемых языком Java.

Тернарный оператор или условный оператор (?:)

Тернарный оператор — оператор, который состоит из трех операндов и используется для оценки выражений типа boolean. Тернарный оператор в Java также известен как условный оператор. Этот. Цель тернарного оператора или условного оператора заключается в том, чтобы решить, какое значение должно быть присвоено переменной. Оператор записывается в виде:

Пример

Ниже приведен пример:

Будет получен следующий результат:

Оператор instanceof

Оператор instanceof — проверяет, является ли объект определенного типа (типа класса или типа интерфейса) и используется только для переменных ссылочного объекта. Оператор instanceof записывается в виде:

Примеры

Если переменная ссылочного объекта в левой части оператора проходит проверку для класса/типа интерфейса на правой стороне, результатом будет значение true. Ниже приведен пример и описание оператора instanceof:

Будет получен следующий результат:

Этот оператор по-прежнему будет возвращать значение true, если сравниваемый объект является совместимым с типом на право назначения. Ниже приводится еще один пример:

Будет получен следующий результат:

Основы Java: ваша первая программа

Зайдите на  compilejava.net, и вас встретит редактор с кучей готовых примеров.

(Если же вы предпочитаете использовать другую IDE или стороннее приложение, это тоже прекрасно! Скорее всего, ваш новый проект будет состоять из аналогичного кода).

Удалите все, кроме следующего:

Это то, что мы, программисты, мы называем «шаблоном» (этот код скопирован из учебника Java от Фила Данфи). Шаблонный код – так можно назвать любой код, который встречается внутри практически любой программы.

Первая строка здесь определяет «класс», который по сути является модулем кода. Затем нам нужен метод внутри этого класса, который представляет собой небольшой блок кода, выполняющий задачу. В каждой программе Java должен быть метод main, так как он сообщает Java, где начинается программа.

Об остальном поговорим чуть ниже, не беспокойтесь. Все, что нам нужно знать для этого урока Java прямо сейчас, – это то, что код, который мы действительно хотим запустить, должен быть помещен в фигурные скобки под словом «main».

Поместите сюда следующий оператор:

Этот оператор напишет слова: «Hello world!» на вашем экране. Нажмите «Compile & Execute» и вы увидите его в действии.

Поздравляю! Вы только что написали свое первое Java-приложение!

Условные конструкции

Последнее обновление: 17.04.2018

Одним из фундаментальных элементов многих языков программирования являются условные конструкции. Данные конструкции
позволяют направить работу программы по одному из путей в зависимости от определенных условий.

В языке Java используются следующие условные конструкции: и

Конструкция if/else

Выражение if/else проверяет истинность некоторого условия и в зависимости от результатов проверки выполняет определенный код:

int num1 = 6;
int num2 = 4;
if(num1>num2){
    System.out.println("Первое число больше второго");
}

После ключевого слова ставится условие. И если это условие выполняется, то срабатывает код, который помещен в далее в
блоке if после фигурных скобок. В качестве условий выступает операция сравнения двух чисел.

Так как, в данном случае первое число больше второго, то выражение истинно и возвращает значение
. Следовательно, управление переходит в блок кода после фигурных скобок и начинает выполнять содержащиеся там инструкции, а
конкретно метод . Если бы первое число оказалось бы меньше второго или равно ему, то инструкции в блоке if не выполнялись бы.

Но что, если мы захотим, чтобы при несоблюдении условия также выполнялись какие-либо действия? В этом случае мы можем добавить блок :

int num1 = 6;
int num2 = 4;
if(num1>num2){
    System.out.println("Первое число больше второго");
}
else{
    System.out.println("Первое число меньше второго");
}

Но при сравнении чисел мы можем насчитать три состояния: первое число больше второго, первое число меньше второго и числа равны.
С помощью выражения , мы можем обрабатывать дополнительные условия:

int num1 = 6;
int num2 = 8;
if(num1>num2){
    System.out.println("Первое число больше второго");
}
else if(num1<num2){
    System.out.println("Первое число меньше второго");
}
else{
    System.out.println("Числа равны");
}

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

int num1 = 8;
int num2 = 6;
if(num1 > num2 && num1>7){
	System.out.println("Первое число больше второго и больше 7");
}

Здесь блок if будет выполняться, если равно и одновременно равно .

Конструкция switch

Конструкция switch/case аналогична конструкции , так как позволяет обработать сразу несколько условий:

int num = 8;
switch(num){
            
    case 1: 
        System.out.println("число равно 1");
        break;
    case 8: 
        System.out.println("число равно 8");
        num++;
        break;
    case 9: 
        System.out.println("число равно 9");
        break;
    default:
        System.out.println("число не равно 1, 8, 9");
}

После ключевого слова switch в скобках идет сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями, помещенными после операторов
сase. И если совпадение найдено, то будет выполняет соответствующий блок сase.

В конце блока сase ставится оператор break, чтобы избежать выполнения других блоков. Например, если бы убрали оператор в следующем случае:

case 8: 
    System.out.println("число равно 8");
    num++;
case 9: 
    System.out.println("число равно 9");
    break;

то выполнился бы блок , (поскольку переменная num равна 8). Но так как в этом блоке оператор break отсутствует, то начал бы выполняться блок .

Если мы хотим также обработать ситуацию, когда совпадения не будет найдено, то можно добавить блок default,
как в примере выше. Хотя блок default необязателен.

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

int num = 3;
int output = 0;
switch(num){
	
	case 1: 
		output = 3;
		break;
	case 2: 
	case 3: 
	case 4: 
		output = 6;
		break;
	case 5: 
		output = 12;
		break;
	default:
		output = 24;
}
System.out.println(output);

Тернарная операция

Тернарную операция имеет следующий синтаксис: .
Таким образом, в этой операции участвуют сразу три операнда.
В зависимости от условия тернарная операция возвращает второй или третий операнд: если условие равно , то
возвращается второй операнд; если условие равно , то третий. Например:

int x=3;
int y=2;
int z = x<y? (x+y) : (x-y);
System.out.println(z);

Здесь результатом тернарной операции является переменная z. Сначала проверяется условие .
И если оно соблюдается, то z будет равно второму операнду — (x+y), иначе z будет равно третьему операнду.

НазадВперед

Краткие выводы

  • Все логические операторы применяются к булевским выражениям, то есть таким, о которых можно сказать, true они или false.
  • Если операторы , или применяются к числам, речь идёт уже не о логических операциях, а о побитовых. То есть оба числа переводятся в двоичную систему и к этим числам побитово применяют операции логического сложения, умножения или вычитания.
  • В математической логике операторам и соответствуют конъюнкция и дизъюнкция.
  • Логическое И похоже на умножения 1 (true) и 0 (false).
  • Логическое ИЛИ напоминает поиск максимума среди 1 (true) и 0 (false).
  • Для побитового отрицания целого числа a используется операция .
  • Для логического отрицания булевского выражения a используется операция .
  • Отрицательные числа хранятся и обрабатываются в дополнительном коде.
  • Поразрядный сдвиг вправо может сохранять знак (), а может — не сохранять ().
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector