Подтвердить что ты не робот

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
4b9b3361

Ответ 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().