Java if语句始终返回true

时间:2013-02-07 14:47:42

标签: java if-statement null

我试图通过检查空值来验证Swing表单中的一些输入。但是,checkFirstName方法始终返回true。因此,例如,如果我在表单上留下firstname为空,即使该字段为空,它也将返回true。

这是我的两个方法,当用户点击保存按钮时会触发第一个方法。

public void saveNewCustomer() throws SQLException, ClassNotFoundException {

        boolean dbOK = false;//boolean to check if data input is not null

        System.out.println(dbOK);
        String firstName = txtNCustomerFirstName.getText();
        String lastName = txtNCustomerLastName.getText();

        if (checkFirstName(firstName)) {
            dbOK = true;
        } else {
            lblNCustFirstNameError.setText("First Name Must be Entered");
            dbOK = false;
        }
        System.out.println(dbOK);

        if (dbOK) {
            dbConnector.insertSignup(firstName, lastName);
            System.out.println("Success");
        } else {
            System.out.println("Error");
        }
    }

    public boolean checkFirstName(String firstName) {
        boolean allOK = false;
        System.out.println(allOK);

        if (firstName != null) {
            allOK = true;
        } else {
            allOK = false;
        }
        return allOK;
    }

我做错了什么导致我应该返回false,因为firstname字段为null。

6 个答案:

答案 0 :(得分:3)

String永远不会为空,String将为空。检查firstName.isEmpty()。我仍然建议你保持检查空值:

public boolean checkFirstName(String firstName) {
    boolean allOK = false;
    System.out.println(allOK);

    if (firstName != null && !firstName.isEmpty()) {
        allOK = true;
    } else {
        allOK = false;
    }
    return allOK;
}

编辑:正如Windle所指出的,你可能想检查一下String是否至少有一个非空格:

if (firstName != null && !firstName.trim().isEmpty())

此外,您可以执行更复杂的验证 - 例如,如果您想确保修剪后用户名中没有空格。

答案 1 :(得分:1)

  

例如,如果我在表单上留下名字空白

您只是在检查null,您还需要执行空("")字符串检查。

应该是这样的:

if (firstName != null && !"".equals(firstName.trim()) {

答案 2 :(得分:0)

txtNCustomerFirstName.getText方法返回一个空字符串。您可以更改checkFirstName方法的if语句以检查空字符串:

if (firstName != null && !firstName.isEmpty()) {

如果您没有Java 6+,则可以使用firstName.length() > 0代替isEmpty

答案 3 :(得分:0)

据我所知,你在saveNewCustomer()中调用的getText()方法将返回一个空字符串而不是null。

答案 4 :(得分:0)

  

因此,例如,如果我将第一个名称留在窗体上,它将会是空白   即使该字段为空,也返回true。

这是你的推理错误的地方。当您将文本字段留空时,getText()会返回空字符串,即非空""。你应该检查空虚而不是null

if (!firstName.isEmpty()) { ... }

如果firstName也可能是null(例如,当它来自其他来源时),您应该事先检查一下:

if (firstName != null && !firstName.isEmpty()) { ... }

答案 5 :(得分:0)

正如其他答案所建议的那样,使用空字符串检查进行空检查。我会说在做空检查之前修剪前导空格和尾随空格,因为实际上你想要避免这种情况。

if (firstName != null && !firstName.trim().isEmpty()) { ... }