Как сравнить строки в операторах if-else? - PullRequest
4 голосов
/ 06 октября 2011

Интересно, кто-нибудь может дать мне указатель с некоторой предварительной популяцией в JSP:

Поэтому я пытаюсь предварительно установить флажок в зависимости от значения в записи базы данных клиентов. Флажок будет установлен, если в поле есть 1, другой вариант будет 0, где флажок должен быть пустым.

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

<%if (UPDATEDPREFERENCES != null)
{ 
    if (ISNEWSLETTER != "0") {
        out.println("checked");
    } 
}
%>

так будет:

<input type='checkbox' class="newsletter" name='temp_ISNEWSLETTER_FIELD' id="temp_ISNEWSLETTER_FIELD" <%if (UPDATEDPREFERENCES != null)
{ 
    if (ISNEWSLETTER != "0") {
        out.println("checked");
    } 
}
%>/>

В нынешнем виде он прекрасно заполняется. Тем не менее, оно также заполняется, если поле равно 0. Если я изменю его на чтение:

if (ISNEWSLETTER == "1")

тогда флажок пуст, будь то 1 или 0.

Я что-то упускаю из виду? Я не разработчик, я нахожусь в Нью-Йорке, и моя поддержка находится в Бельгии - они все ушли на день.

1 Ответ

10 голосов
/ 06 октября 2011

Строки являются объектами , а не примитивами . Используйте equals(), а не == / !=. == / != не будет проверять, содержат ли они одно и то же значение, но указывают ли они на одну и ту же ссылку на объект. equals() проверит, содержат ли они одинаковое значение.

Итак, вместо if (ISNEWSLETTER != "0") вы должны использовать

if (!ISNEWSLETTER.equals("0"))

и вместо if (ISNEWSLETTER == "1") вы должны использовать

if (ISNEWSLETTER.equals("1"))

Эта проблема не связана с JSP. У вас будет точно такая же проблема, когда вы делаете это в обычном классе Java (где этот тип кода на самом деле принадлежит).

В качестве альтернативы, поскольку они представляют числа, вы также можете просто преобразовать ISNEWSLETTER в int. Это примитив, поэтому вы можете использовать == / != обычным способом. При необходимости вы можете конвертировать String в int, используя Integer#parseInt(). Или даже более того, если оно действительно представляет логическое состояние (это может быть только true или false), тогда вам лучше вместо этого использовать boolean. Вы можете просто использовать его прямо в условии if без каких-либо сравнений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...