无法在基本类型int error上调用equals(String)?

时间:2016-02-17 16:44:05

标签: java

我遇到以下if statement block的问题:

public void viewaccount ( ) {
    Scanner getinput = new Scanner(System.in);
    System.out.println("Enter your account number to log in");
    int login = getinput.nextInt();
    if (login.equals("accnumber")) {   // <== here
        /* to be written */
    }
}

4 个答案:

答案 0 :(得分:2)

.equals(String)是一种检查两个字符串是否包含相同字符/文本的方法。显然,你不能在int上调用.equals()来检查它是否包含与字符串相同的字符,因为int不包含字符(当然,它转换为人类可读的形式)。

如果您想检查用户是否输入了正确的帐号,您应该执行以下操作:

public void viewaccount() {

    Scanner getinput = new Scanner(System.in);
    System.out.println("Enter your account number to log in");
    int login = getinput.nextInt();

    // Correct account number:
    int correctAccountNumber = 1234567;

    if (login == correctAccountNumber) {
        // Hooray! Success.


    }else{
        System.out.println("You have entered the incorrect account number.");
    }

}

如果在真实世界的应用程序中使用它,那么从安全角度来看,这将是一场噩梦,但对于学习,这应该可以解决您的问题。

为了让您更深入地了解.equals()的工作原理,我建议您阅读the Java Objects classintprimitive data type,因此它没有像String那样内置的方法。 String被视为composite data type,允许String拥有.length().equals().trim()等方法和属性。

在Java中,所有类都有Object作为超类,它允许所有类和复合数据类型继承.equals().hashcode().toString()等方法,但是最重要的是,所有复合数据类型也可以实现自己的方法。例如,Integer数据类型(它是基元int的包装器)添加了.parseInt().compare()等函数。

与大多数语言不同,Java为所有这些数据类型提供原始数据类型和内置包装类。 intIntegerbooleanBooleanlongLongcharCharacter。所有其他原始类型的列表都会继续。

答案 1 :(得分:0)

equals方法是类Object的方法。原始类型(如int)不是对象,也无法访问equals方法。

如果要比较基元类型,则必须使用==。在您的情况下,您尝试将int(这是一个数字)与String(这是一个文本)进行比较,这没有意义 - 它始终是false < / p>

也许在你的情况下你应该像这样读取输入:

String login = getinput.next();

然后您可以使用equals方法,因为login变量的类型为String,其范围为Object,可与equals进行比较。< / p>

修改

如果您仍想将数据作为数字读取,则应将登录变量从int转换为String,以便将其与另一个String进行比较。

这样做是这样的:

int login = getinput.nextInt();
    if (String.valueOf(login).equals("accnumber")) {   
        /* to be written */
    }

当然,这总是会返回false,所以只有当你给出的String字面值类似于“131423”时才会有效。我真的希望这个“accnumber”是一个虚拟字符串,仅用于示例。否则我没有看到任何其他好的方法。

答案 2 :(得分:0)

如果要比较int,则不需要使用.equals()方法。由于您将输入转换为int,因此可以使用“==”将一个int与另一个int进行比较。此外,“accnumber”需要初始化为int变量。

答案 3 :(得分:-1)

只需抓住下一个字符串而不是下一个字符串。

String input = getInput.next();
input.equals("accountNumber");