что значит знак вопроса в java
Условное ветвление: if, ‘?’
Иногда нам нужно выполнить различные действия в зависимости от условий.
Инструкция «if»
В примере выше, условие – это простая проверка на равенство ( year == 2015 ), но оно может быть и гораздо более сложным.
Если мы хотим выполнить более одной инструкции, то нужно заключить блок кода в фигурные скобки:
Преобразование к логическому типу
Инструкция if (…) вычисляет выражение в скобках и преобразует результат к логическому типу.
Давайте вспомним правила преобразования типов из главы Преобразование типов:
Таким образом, код при таком условии никогда не выполнится:
…а при таком – выполнится всегда:
Блок «else»
Инструкция if может содержать необязательный блок «else» («иначе»). Он выполняется, когда условие ложно.
Несколько условий: «else if»
Блоков else if может быть и больше. Присутствие блока else не является обязательным.
Условный оператор „?“
Иногда нам нужно определить переменную в зависимости от условия.
Так называемый «условный» оператор «вопросительный знак» позволяет нам сделать это более коротким и простым способом.
Этот пример будет делать то же самое, что и предыдущий:
Но скобки делают код более читабельным, поэтому мы рекомендуем их использовать.
Несколько операторов „?“
Поначалу может быть сложно понять, что происходит. Но при ближайшем рассмотрении мы видим, что это обычная последовательная проверка:
Вот как это выглядит при использовании if..else :
Нетрадиционное использование „?“
Здесь мы не присваиваем результат переменной. Вместо этого мы выполняем различный код в зависимости от условия.
Не рекомендуется использовать оператор вопросительного знака таким образом.
Вот, для сравнения, тот же код, использующий if :
При чтении глаза сканируют код по вертикали. Блоки кода, занимающие несколько строк, воспринимаются гораздо легче, чем длинный горизонтальный набор инструкций.
Тернарный оператор Java – примеры
Тернарный оператор Java функционирует как упрощенный оператор Java if. Состоит из условия, которое оценивается как истинное или ложное, плюс значение, которое возвращается, если условие истинно, и другое значение, если ложно. Вот простой пример тернарного оператора:
Часть условия вышеупомянутого выражения:
Условие является выражением Java, которое оценивается как true или false. Приведенное выше условие будет иметь значение true, если переменная case равна верхнему значению Java String, и значение false, если нет.
Условием может быть любое выражение, которое оценивается как логическое значение, так же как выражения, которые вы можете использовать внутри оператора if – или while.
Значения
За условной частью следует знак вопроса (?). После него находятся два значения, которые может возвращать оператор, разделенные двоеточием (:):
Часть значений состоит из двух значений. Первое значение возвращается, если часть условия (см. выше) имеет значение true, второе – false.
В приведенном выше примере:
Это означает, что имя переменной String в конечном итоге будет иметь значение JOHN или john в зависимости от того, будет ли выражение case.equals (“uppercase”) иметь значение true или false.
Возвращаемые значения могут быть результатом любого выражения Java, которое возвращает значение, присвоенное переменной в начале оператора. Поскольку переменная в начале примера в верхней части этой статьи имеет тип String, значения, возвращаемые части values, должны иметь тип String.
Использование в качестве нулевой проверки
Можно использовать оператор в качестве сокращения для нулевых проверок перед вызовом метода объекта:
Это эквивалентно, но короче, чем этот код:
Оба этих примера кода избегают вызова object.getValue(), если ссылка на объект равна нулю, но первый пример кода немного короче и элегантнее.
Использование в качестве максимальной функции
Вы можете достичь той же функциональности, что и функция Java Math max(), используя тернарный оператор:
Обратите внимание, как условия проверяют, больше ли значение val1 или равно значению val2. Если это так, тернарный оператор возвращает значение val1. В противном случае он возвращает значение val2.
В качестве функции min
Может использоваться для достижения того же эффекта, что и функция Java Math min():
Обратите внимание, как условия проверяют, меньше ли значение val1 или равно значению val2. Если это так, оператор возвращает значение val1. В противном случае он возвращает значение val2.
Как функция abs
Может использоваться для достижения того же эффекта, что и функция Java Math abs():
Связывание
Можно связать несколько троичных операторов вместе. Это достигается тем, что одно из значений, возвращаемых оператором, является другим троичным оператором. Вот пример:
Вы можете связывать и вкладывать тернарные операторы столько, сколько хотите, при условии, что каждый из них возвращает одно значение и используется вместо одного значения.
Конечно, вы могли бы упростить приведенный выше пример. Вместо цепочки могли бы объединить два условия, которые возвращают 0, в одно, например:
Однако это возможно только потому, что значение null и пустая строка возвращают одно и то же значение (0).
9. Java — Основные операторы языка
Java предоставляет богатый набор операторов для управления переменными. Все операторы Java можно разделить на следующие группы:
Содержание
Арифметические операторы
Арифметические операторы — используются в математических выражениях таким же образом, как они используются в алгебре. Предположим, целая переменная A равна 10, а переменная B равна 20. В следующей таблице перечислены арифметические операторы в Java:
Пример
Следующий простой пример показывает программно арифметические операторы. Скопируйте и вставьте следующий java-код в файл test.java, скомпилируйте и запустить эту программу:
Это произведет следующий результат:
Операторы сравнения
Есть следующие операторы сравнения, поддерживаемые на языке Java. Предположим, переменная A равна 10, а переменная B равна 20. В следующей таблице перечислены реляционные операторы или операторы сравнения в Java:
Пример
Следующий простой пример показывает, программно побитовые операторы в Java. Скопируйте и вставьте следующий java-код в файл test.java, скомпилируйте и запустить эту программу:
Будет получен следующий результат:
Логические операторы
Предположим, логическая переменная A имеет значение true, а переменная B хранит false. В следующей таблице перечислены логические операторы в Java:
Оператор | Описание | Пример |
&& | Называется логический оператор «И». Если оба операнда являются не равны нулю, то условие становится истинным | (A && B) — значение false |
|| | Называется логический оператор «ИЛИ». Если любой из двух операндов не равен нулю, то условие становится истинным | (A || B) — значение true |
! | Называется логический оператор «НЕ». Использование меняет логическое состояние своего операнда. Если условие имеет значение true, то оператор логического «НЕ» будет делать false | !(A && B) — значение true |
Пример
Следующий простой пример показывает, программно логические операторы в Java. Скопируйте и вставьте следующий java-код в файл test.java, скомпилируйте и запустить эту программу:
Это произведет следующий результат:
Операторы присваивания
Существуют следующие операторы присваивания, поддерживаемые языком Java:
Пример
Следующий простой пример показывает, программно логические операторы в Java. Скопируйте и вставьте следующий java-код в файл test.java, скомпилируйте и запустить эту программу:
Будет получен следующий результат:
Прочие операторы
Есть несколько других операторов, поддерживаемых языком Java.
Тернарный оператор или условный оператор (?:)
Тернарный оператор — оператор, который состоит из трех операндов и используется для оценки выражений типа boolean. Тернарный оператор в Java также известен как условный оператор. Этот. Цель тернарного оператора или условного оператора заключается в том, чтобы решить, какое значение должно быть присвоено переменной. Оператор записывается в виде:
Пример
Ниже приведен пример:
Будет получен следующий результат:
Оператор instanceof
Оператор instanceof — проверяет, является ли объект определенного типа (типа класса или типа интерфейса) и используется только для переменных ссылочного объекта. Оператор instanceof записывается в виде:
Примеры
Если переменная ссылочного объекта в левой части оператора проходит проверку для класса/типа интерфейса на правой стороне, результатом будет значение true. Ниже приведен пример и описание оператора instanceof:
Будет получен следующий результат:
Этот оператор по-прежнему будет возвращать значение true, если сравниваемый объект является совместимым с типом на право назначения. Ниже приводится еще один пример:
Будет получен следующий результат:
Приоритет операторов в Java
Приоритет операторов определяет группирование терминов в выражении. Это влияет как вычисляется выражение. Некоторые операторы имеют более высокий приоритет, чем другие; например оператор умножения имеет более высокий приоритет, чем оператор сложения:
Например, x = 7 + 3 * 2. Здесь x присваивается значение 13, не 20, потому что оператор «*» имеет более высокий приоритет, чем «+», так что сначала перемножается «3 * 2», а затем добавляется «7».
В таблице операторы с наивысшим приоритетом размещаются в верхней части, и уровень приоритета снижается к нижней части таблицы. В выражении высокий приоритет операторов в Java будет оцениваться слева направо.
Знак вопроса в java
Где Exp1, Exp2 и Exp3 являются выражениями. Обратите внимание на использование и размещение двоеточия.
Чтобы определить значение всего выражения, сперва нужно оценить Exp1:
Изучаю сейчас Reflection. В примере есть строка
Что означает знак вопроса?
И почему нельзя просто написать
1 ответ 1
Grundy прав.
По идее он может быть полезен в трех случаях.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками java классы рефлексия или задайте свой вопрос.
Похожие
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2019 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2019.11.15.35459
Иногда нам нужно выполнить различные действия в зависимости от условий.
Оператор «if»
В примере выше, условие – это простая проверка на равенство ( year == 2015 ), но оно может быть и гораздо более сложным.
Если мы хотим выполнить более одной инструкции, то нужно заключить блок кода в фигурные скобки:
Преобразование к логическому типу
Оператор if (…) вычисляет выражение в скобках и преобразует результат к логическому типу.
Давайте вспомним правила преобразования типов из главы Преобразование типов:
Таким образом, код при таком условии никогда не выполнится:
…а при таком – выполнится всегда:
Блок «else»
Оператор if может содержать необязательный блок «else» («иначе»). Выполняется, когда условие ложно.
Несколько условий: «else if»
Блоков else if может быть и больше. Присутствие блока else не является обязательным.
Условный оператор „?“
Иногда, нам нужно назначить переменную в зависимости от условия.
Так называемый «условный» оператор «вопросительный знак» позволяет нам сделать это более коротким и простым способом.
Этот пример будет делать то же самое, что и предыдущий:
Но скобки делают код более читабельным, поэтому мы рекомендуем их использовать.
Несколько операторов „?“
Поначалу может быть сложно понять, что происходит. Но при ближайшем рассмотрении мы видим, что это обычная последовательная проверка:
Вот как это выглядит при использовании if..else :
Нетрадиционное использование „?“
Здесь мы не присваиваем результат переменной. Вместо этого мы выполняем различный код в зависимости от условия.
Не рекомендуется использовать оператор вопросительного знака таким образом.
Вот, для сравнения, тот же код, использующий if :
При чтении глаза сканируют код по вертикали. Блоки кода, занимающие несколько строк, воспринимаются гораздо легче, чем длинный горизонтальный набор инструкций.
Что означает знак вопроса в параметре типа generics Java?
Это небольшой фрагмент кода, взятый из некоторых примеров, которые сопровождают Стэнфордский парсер. Я развиваюсь на Java около 4 лет, но никогда не имел очень сильного понимания того, что должен указывать этот стиль кода.
Я не беспокоюсь о деталях кода. То, что я смущен, – это то, что, как предполагается, должно распространяться родовое выражение на английском языке.
Может кто-нибудь объяснить это мне?
Обновление: PDF-ссылка была обновлена, так как Oracle удалила ее некоторое время назад. Теперь он указывает на копию, размещенную в Университете королевы Марии при Лондонской школе электронной инженерии и компьютерных наук.
Обновление 2: давайте немного подробнее рассмотрим, почему вы хотите использовать подстановочные знаки.
Любой тип, расширяющийся Object (включая Object )
в то время как ваш пример выше означает
Любой тип, расширяющий или реализующий HasWord (включая HasWord if HasWord – не абстрактный класс)
List принимает любые конкретные классы, которые расширяют HasWord. Если у вас есть следующие классы…
… wordList может ТОЛЬКО содержать список As или Bs или смесь обоих, поскольку оба класса расширяют один и тот же родительский элемент или null (который не выполняет проверку экземпляра для HasWorld ).
Возможно, придуманный пример из “реального мира” поможет.
Не уверен, насколько это помогает. Указатель на указатель при наличии полиморфизма не совсем очевиден.
На английском языке: