Что значит :: знак в java? [дубликат]
Часто вижу :: при определении нового экземпляра, в стримах, иногда в лямда выражениях. Что он значит? Что значит List :: stream ? P.S. И как он называется?
Отслеживать
Anton Sorokin
задан 16 авг 2018 в 3:38
Anton Sorokin Anton Sorokin
6,998 6 6 золотых знаков 37 37 серебряных знаков 65 65 бронзовых знаков
В народе он называется «квадроточие».
16 авг 2018 в 6:59
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Оператор «ссылка на метод» (Method Reference). По сути — сокращенная запись для ссылки на метод из функционального интерфейса при использовании лямбды.
List::stream
является ссылкой на метод stream() из интерфейса List
List> list = Arrays.asList( Arrays.asList(1,2,3), Arrays.asList(4,5,6) ); list.steam() .flatMap(List::stream) .forEach(System.out::println);
приведенный отрывок кода означает: 1. Мы инициализируем поток, в котором будет список чисел ( Stream> ) 2. с помощью flatMap мы объединяем список чисел в поток чисел ( Stream ) 3. с помощью forEach и ссылки на метод println для каждого элемента из потока вызывается вывод на экран
Если владеете английским, хорошее объяснение с примерами приведено в этом ответе
Что значит ? значит на Java

Java предоставляет широкий спектр операторов, таких как оператор присваивания «=» , оператор приращения « ++ », оператор декремента «–» и так далее. Возможно, вы слышали обо всех этих операторах, но слышали ли вы когда-нибудь о троичном «?» оператор? Что ж, это не что иное, как альтернативный вариант оператора if-else, который также известен как условный оператор. Более того, использование вложенного тернарного оператора «?» предоставляет функциональные возможности операторов switch.
В этой статье мы собираемся исследовать различные аспекты оператора «?»:
- Что означает «?» в Java
- Синтаксис
- Как «?» работает на Java
- Как использовать вложенный «?» на Java
Что значит «?» в Java
«?» в java — это не что иное, как оператор, который работает так же, как выполняются операторы if-else, и поэтому он более известен как условный или тернарный оператор в java. «?» в java помогают нам писать простой, лаконичный и понятный код.
Синтаксис
Тернарный или условный оператор состоит из двух символов: один из них — «?» а другой — «:» , и вместе эти два символа образуют выражение:
(condition/expression) ? first-expression : second-expression
Из приведенного выше фрагмента видно, что всего имеется три экземпляра, т. е. конкретное условие и два выражения.
Как работает «?» на Java
Как «?» оператор работает аналогично операторам if-else, поэтому сначала он проверяет условие.
- Если true, то будет выполнено первое выражение.
- Если false, то будет выполнено второе выражение.
Давайте рассмотрим приведенные ниже примеры для глубокого понимания того, как «?» оператор работает в java или как он заменяет оператор if-else.
Пример
Фрагмент ниже проверит условие, используя оператор if-else, чтобы узнать, является ли предоставленное число четным или нечетным:
publicclassTernaryOperatorExample < publicstaticvoidmain(String[] args) < int number = 35; if (number % 2 == 0) < System.out.println("Вы ввели четное число"); >else < System.out.println("Вы ввели нечетное число"); >> >
Данное число будет разделено на 2, если в остатке 0, то будет показано четное число, в противном случае — нечетное число.
Вывод подтверждает правильность оператора if-else.
Пример
Теперь давайте выполним приведенный выше пример с помощью оператора «?»:
publicclassTernaryOperatorExample < publicstaticvoidmain(String[] args) < int number = 35; String res = (number % 2 == 0) ? "Четное число" :"Нечетное число"; System.out.println(res); >>
Использование оператора ? делает наш код кратким и легким для понимания. Приведенный выше фрагмент кода подтверждает работу оператора «?».
Как использовать вложенный «?» на Java
Иногда мы сталкиваемся со сценарием, в котором нам нужно пройти через несколько условий, в таких случаях мы должны использовать несколько операторов «?» и, следовательно, известны как вложенные троичные «?». Рассмотрим приведенный ниже пример для глубокого понимания этой концепции.
Пример
В этом примере есть три числа и среди них мы должны найти большее число:
publicclassTernaryOperatorExample < publicstaticvoidmain(String[] args) < int num1 = 51, num2 = 45, num3 = 55; int res = (num1 >= num2) ? ((num1 >= num3) ? num1 : num3) : ((num2 >= num3) ? num2 : num3); System.out.println("Большее число - это: " + res); > >
В приведенном выше фрагменте кода мы применяем вложенный тернарный оператор, чтобы найти наибольшее число среди заданных чисел и сохранить результат в переменной «res».
Вышеприведенный фрагмент кода покажет, что «55» больше, чем «51» и «45» , что показывает, что вложенный оператор «?» работает эффективно.
Вывод
В Java «?» известен как тернарный/условный оператор, и он работает так же, как и операторы if-else. «?» в java включает три экземпляра, т.е. конкретное условие и два выражения. Если указанное условие истинно, то будет выполнено первое выражение, иначе будет выполнено второе выражение. В случае нескольких условий можно использовать вложенный тернарный оператор. Эта статья представляет собой подробное руководство об операторе «?», что он означает в java, и как использовать «?» символ в java.
Что значит знак в java
Я тоже откладывал в долгий ящик эту тему, но тут даже интересно было. Professor Hans Noodles как всегда на высоте
19 августа 2022
Очень полезная статья, избегал тему битов и всего такого. Как это часто бывает, просто не хотел вникать. Оказалось ничего сложного, спасибо большое автору
Rexalifet Уровень 23
17 августа 2022
Попал сюда находясь на первых уровнях. Ретируюсь во имя избежания перегрева мозга
reteruvsky Уровень 20
4 мая 2022
Для тех, кто НЕ ПОНЯЛ, или ЧАСТИЧНО ПОНЯЛ данную статью, советую прочесть книгу, которую нам рекомендовали на начальных уровнях, а именно Чарльз Петцольд «Тайный код информатики» Все изложенное в статье по сути является ничем иным, как принципом и логикой работы компьютера в целом. Двоичная система, логические вентили И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, Инвертирование. Все это изложено в данной книге. Она обязательна к прочтению КАЖДОМУ, кто хочет стать ПРОГРАММИСТОМ. Своего рода библия в мире компьютеров. Вы поймёте как в целом вообще работает компьютер, как он складывает числа, устройство процессора и памяти и тд. Книга очень увлекательная, хотя местами немного сложновата для понимания, но оно того стоит. Единственное, чего лично мне не понятно, зачем нам в Java побитовые операции, когда это по сути машинный код, а мы программируем на языке высокого уровня
4 мая 2022
а для чего ?: служит и есть ли отдельно ? и отдельно :
hidden #2544557 Уровень 10 Expert
30 марта 2022
Я не понимаю, зачем побитовый сдвиг нужен? Где это применимо? Или это просто как вариант возведения в x*2 в n степень? Зачем такие сложности? И ещё вопрос, если кто-то объяснит как и зачем — буду ОЧЕНЬ благодарен! При изменении знака (1го бита) из 10 мы получаем -11 — мои знания математики вышли покурить. Мы же знак меняем, а не число? Я понимаю что ноль не бывает отрицательным и это мы перескакиваем, но почему именно такая реализация? Оператор XOR это вообще для меня пока запредельное что-то.
Операторы в Java: для чего нужны и какие бывают
Знакомимся с основными инструментами языка и учимся работать с ними на практике.


Иллюстрация: Оля Ежак для Skillbox Media

Лев Сергеев
Программист, музыкант. Знает Java, C# и Unity3D, но не собирается останавливаться на достигнутом.
Все мы со школы знакомы с математическими знаками + (плюс), – (минус), = (равно) и так далее. В Java и других языках программирования эти символы называются операторами. Они нужны для того, чтобы сообщить компилятору, какое действие совершать с операндами — числами, строками, объектами и другими значениями по обе стороны оператора.

Например, на картинке выше оператор + говорит компилятору: «Сложи два числа». Но на практике чисел в выражении может быть разное количество — и одно, и два, и три. В этих случаях и операторы будут называться по-разному: унарные — что-то делают с одним операндом, бинарные — с двумя, и тернарные — с тремя.
В этой статье рассмотрим не только эти, но все основные виды операторов в Java:
- Присваивания
- Арифметические
- Унарные
- Сравнения
- Логические
- Тернарный
- Оператор instanceof
- Побитовые
- Составные операторы присваивания
Ещё поговорим о приоритетах операторов — разберёмся, в каком порядке они выполняются. Если вы хотите просто освежить в памяти суть работы разных операторов, можете сразу перейти к шпаргалке в конце статьи.
Оператор присваивания в Java
Оператор присваивания в Java — это знак = (равно). Его задача — переложить значение переменной справа в переменную слева:

Вот как это выглядит в коде (в комментариях — разбор синтаксиса):
Тернарный оператор в Java: можно, только осторожно
Что делает: сокращает условную конструкцию if-else до одной строчки.
Тернарный оператор (от латинского слова ternarius — «тройной») — это языковая конструкция, которая состоит из трёх операндов: логического условия и двух выражений. Если результат логического условия будет true, выполнится первое выражение, если false — второе. Записываются тернарные операторы так:

Фишка в том, что таким образом мы можем записать конструкцию if-else всего одной строчкой. Допустим, нам нужно проверить булеву переменную condition — если она возвращает true, то переменная a = 100, а если false, то a = 200. Посмотрите, как легко это можно сделать с помощью тернарного оператора:

Кажется, что эти if-else теперь вообще больше не нужны. Мол, ставь везде тернарные операторы, и дело с концом. Однако в больших программах со сложной логикой это может повредить читаемости кода. Это в нашем примере выражение простое — а представьте, если в каждое выражение положить ещё по одному оператору. Получится неопрятно. Другому разработчику, который будет читать наш код, разобраться будет сложно.
Поэтому тернарные операторы рекомендуют использовать в тех случаях, когда условие простое и легко проверяется. А во всех остальных случаях прибегать к привычным «ифам» и «элсам».
Подробно о том, как работать с тернарными операторами, мы рассказывали в статье: «Тип Boolean и операторы сравнения в Java».
Оператор instanceof в Java
Что делает: проверяет, принадлежит ли объект к какому-то классу или интерфейсу, и возвращает булево значение — то есть true или false.
Использование instanceof актуально, когда нужно проверить родителя объекта прямо во время выполнения программы. Например, если объекты приходят в ваш код из базы данных или другого потока выполнения и вам нужно убедиться, что к ним можно применять методы какого-то класса. Записывается instanceof так:


Побитовые операторы вычисления бывают следующими:
| Символ | Что означает |
|---|---|
| & | Побитовое И (AND) — умножение |
| | | Побитовое ИЛИ (OR) — сложение |
| ^ | Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR) — вычитание |
| ~ | Побитовое НЕ (NOT) — отрицание |
Чтобы посмотреть, как работают побитовые вычисления в Java, переведём несколько десятичных чисел в двоичную систему счисления:

Если разобраться в концепции старшего бита, можно без труда освоить три оставшихся побитовых оператора, которые называются операторами смещения битов:
| Символ | Что означает |
|---|---|
| Сдвиг битов влево | |
| >> | Сдвиг битов вправо |
| >>> | Беззнаковый сдвиг битов вправо |
Операторы сдвига смещают все биты в левую или правую сторону, но делают это по-разному:
- >> не трогает старший бит, оставляя число с тем же знаком (отрицательным или положительным). Ячейки отрицательных чисел при >> заполняются единицами.
- >>> и — затрагивают все биты. Освободившиеся ячейки справа заполняются нулями. Наполнение ячеек слева зависит от знака и оператора.
Звучит сложно, на деле — тоже сложно. Но попробуем разобраться на примере — разложим какое-то десятичное число на биты и посмотрим, как работает смещение битов.
В Java есть метод toBinaryString(), который показывает, как выглядят десятичные числа в двоичной системе. Но двоичные числа — это ещё не биты. Например, число 2 занимает 32 бита, но если обработать его методом toBinaryString(), на экране появятся только два из них: 1 и 0. Оставшиеся 30 нулей просто «обрезаются». Это происходит по той же причине, по которой мы, например, не пишем десятичное число 9 как 009.

Плюс составных операторов в том, что они записываются короче и неявно приводят переменные к одному типу, если эти типы различаются. Например, в сокращённом варианте можно сложить дроби и числа без приведения, и нам за это ничего не будет. А в полной записи будет ошибка:
int x = 1; double y = 3.1415d; x = x + y; // Эта строка не скомпилируется x += y; // А здесь всё хорошо // Оператор += в развёрнутом виде x = (int)(x + y);
Приоритеты операторов Java
У каждого оператора Java есть свой приоритет. Чем он выше, тем раньше оператор выполнится в выражении. Бинарные и тернарный операторы (кроме присваивания) выполняются слева направо, а остальные (унарные и присваивания) — справа налево.
| Приоритет (снизу вверх) |
Группа | Операторы |
|---|---|---|
| 13 | Постфиксные | x++ x–– |
| 12 | Унарные | ++x ––x +x –x ~x !x |
| 11 | Мультипликативные | * / % |
| 10 | Аддитивные | + — |
| 9 | Сдвига битов | >> >>> |
| 8 | Сравнения | > >= instanceof |
| 7 | Равенства | == != |
| 6 | Побитовое И | & |
| 5 | Побитовое исключающее ИЛИ | ^ |
| 4 | Побитовое ИЛИ | | |
| 3 | Логическое И | && |
| 2 | Логическое ИЛИ | || |
| 1 | Тернарный | ? : |
| 0 | Присваивания | = += -= *= /= %= &= ^= |= <>>= >>>= |
Резюме: что нужно запомнить
Мы рассмотрели все основные операторы в Java и их работу на примерах. Попробуем кратко резюмировать, что нужно вынести из этой статьи:
- Оператор — это языковая конструкция, которая выполняет действие над операндом.
- Операнд— это число, переменная, объект и так далее, с которыми оператор совершает какие-то действия (например, арифметическое и логическое).
- Операторы бывают унарные, бинарные и тернарные — это зависит от того, сколько операндов они обрабатывают.
- Арифметические операторы нужны для простых математических действий: сложения, вычитания, умножения, деления и деления с остатком.
- Унарные операторы работают только с одним операндом. Это унарные минус и плюс, инкремент, декремент, логическое и побитовое отрицание.
- Операторы сравнения сопоставляют значения двух операторов и возвращают ответ — true или false.
- Логические операторы заточены уже не на числа, а на целые выражения — и на их основе создают сложные условия, например, для работы в циклах.
- Тернарный оператор умеет работать сразу с тремя операндами: условием и двумя выражениями. То есть им вполне можно заменить ветвления типа if-else.
- Операторinstanceof определяет принадлежность объекта к классу.
- Побитовые операторы нужны для проведения операций с битами — если упростить, то с нулями и единицами в двоичной системе счисления.
- Составные операторы неявно приводят типы данных, если они разные.
- У каждого оператора есть свой приоритет.
Для более глубокого понимания темы можно почитать другие наши статьи: «Тип Boolean и операторы сравнения в Java» и «Логические операторы в Java». А если хотите совсем хорошо разобраться, почитайте официальную документацию Java — это вообще лучший способ освоить язык со всеми его тонкостями.
Читайте также:
- Тип Boolean и операторы сравнения в Java
- Тест. Какой язык создадите вы — Java или Python?
- Чем различается фронтенд- и бэкенд-разработка