Java Ternary Operator для установки True или false
Я пытаюсь установить условие и установить true или false следующим образом, но он все время возвращает false.
boolean checked = (categoriesCursor.getString(3) == "1") ? true
: false;
Log.i("Nomad",categoriesCursor.getString(3)+ " "+checked);
Когда я пытаюсь вывести значения, я получаю следующее.
01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 0 false
01-12 00:05:38.072: I/Nomad(23625): 0 false
Ответы
Ответ 1
Он возвращает false
все время, потому что вы сравниваете ссылки, а не строки. Вероятно, вы имели в виду это:
boolean checked = (categoriesCursor.getString(3).equals("1")) ? true
: false;
Это эквивалентно этому:
boolean checked = categoriesCursor.getString(3).equals("1");
И в случае categoriesCursor.getString(3)
может быть null
, вместо этого вы будете безопаснее:
boolean checked = "1".equals(categoriesCursor.getString(3));
Ответ 2
Используйте equals
вместо ==
boolean checked = (categoriesCursor.getString(3).equals("1"));
Ответ 3
Попробуйте использовать
(categoriesCursor.getString(3).equals("1")) ? true : false;
Ответ 4
Используйте categoriesCursor.getString(3).equals("1")
вместо ==
Ответ 5
Во-первых, чтобы сравнить строки, вам нужно будет использовать метод equals
:
categoriesCursor.getString(3).equals("1")
Во-вторых, здесь вам не нужен тернарный оператор. equals
уже приводит к логическому, поэтому просто назначьте его:
boolean checked = categoriesCursor.getString(3).equals("1");
Ответ 6
Измените его так:
boolean checked = (categoriesCursor.getString(3).equals("1")) ? true : false;
Не используйте ==
для сравнения содержимого String.
ПРИМЕЧАНИЕ: Оператор ==
не может быть перегружен или изменен в JAVA. Если вы используете object1 == object2
, где object1
и object2
являются строками или любым другим объектом, вы будете проверять, ссылаются ли ссылки на один и тот же базовый объект. Это не будет сравнивать содержимое.
Ответ 7
Сначала нет необходимости в тройном операторе. Затем вы должны использовать equals()
вместо ==
. Поскольку оператор ==
проверяет, равны ли ссылки на объекты.
Ответ 8
Вы также можете использовать equalsIgnoreCase().