如何在if-else语句中比较字符串?

Gar*_*ski 4 java jsp if-statement

我想知道是否有人可以在JSP中给出一些预先填充的指针:

所以我试图根据客户数据库记录中的值预先填充一个复选框.如果字段中有1,则检查复选框,另一个选项为0 - 其中复选框应为空.

我目前在输入中使用此代码:

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

所以它会是:

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

就目前而言,它预先填好了.但是,如果字段为0,它也会填充.如果我将其更改为:

if (ISNEWSLETTER == "1")
Run Code Online (Sandbox Code Playgroud)

然后复选框为空,无论它是1还是0.

我错过了一些明显的东西吗 我不是开发人员,我在纽约,我的支持在比利时 - 他们都离开了这一天.

Bal*_*usC 10

字符串对象,而不是基元.使用equals(),而不是==/ !=.该==/ !=不会检查它们是否包含相同的值,但如果它们指向同一个对象的引用.该equals()会检查它们是否包含相同的值.

所以,而不是if (ISNEWSLETTER != "0")你应该使用

if (!ISNEWSLETTER.equals("0"))
Run Code Online (Sandbox Code Playgroud)

而不是if (ISNEWSLETTER == "1")你应该使用

if (ISNEWSLETTER.equals("1"))
Run Code Online (Sandbox Code Playgroud)

此问题与JSP无关.在普通的Java类(这种代码实际上属于这种类)中执行此操作时,您会遇到完全相同的问题.

作为替代方案,因为它们代表数字,你也可以转换ISNEWSLETTERint.这是一个原始的,所以你应该能够使用==/ !=通常的方式.您可以根据需要将a转换Stringint使用Integer#parseInt().或者,甚至更多,如果它实际上代表一个布尔状态(它只能是truefalse),那么你应该boolean改为使用.您可以直接在if条件下使用它而无需进行比较.