修复 Java 中的错误操作数类型错误

Mohammad Irfan 2023年10月12日
  1. Java 中&运算符的错误操作数类型
  2. Java 中&&运算符的错误操作数类型
  3. Java 中 == 运算符的错误操作数类型
  4. Java 中 <= 运算符的错误操作数类型
修复 Java 中的错误操作数类型错误

本教程介绍了 Java 中二元运算符的 bad operand types 错误。

二元运算符是需要两个操作数的运算符。算术运算符和关系运算符等运算符称为二元运算符。

运算符在编程中起着至关重要的作用,有时,由于使用不当,二元运算符会给出错误的操作数类型错误。当两种类型的操作数不兼容时,bad operand types 错误是编译时错误。

例如,我们将字符串与整数进行比较时会出现此错误。本文将介绍此错误如何发生以及如何解决的不同示例。

有时,运算符的优先顺序也可能导致运算符类型不兼容并导致控制台出错。

Java 中&运算符的错误操作数类型

让我们首先了解 Java 代码中可能出现 bad operator error 的最常见情况。看下面的示例代码:

public class MyClass {
  public static void main(String args[]) {
    int x = 43;
    if (x & 21 == 1) {
      System.out.println("if block executing");
    } else {
      System.out.println("else block executing");
    }
  }
}

输出:

MyClass.java:4: error: bad operand types for binary operator '&'
      if( x & 21 == 1){
            ^
  first type:  int
  second type: boolean
1 error

发生此错误是因为 ==(等于)运算符的优先级高于& 运算符的优先级。这导致了 21 == 1 评估,它给了我们一个布尔值。

现在,请注意 & 有一个整数操作数和一个布尔值。由于两个运算符的类型不同,&运算符不能工作,所以我们得到一个错误。

我们将使用括号表示需要首先评估 x & 21 以解决此错误。看下面修改后的代码:

public class MyClass {
  public static void main(String args[]) {
    int x = 43;
    if ((x & 21) == 1) {
      System.out.println("if block executing");
    } else {
      System.out.println("else block executing");
    }
  }
}

输出:

if block executing

Java 中&&运算符的错误操作数类型

同样,如果你正在使用逻辑&&(和)运算符,那么在某些情况下你可能会遇到 bad operand types 错误,例如以下示例代码:

public class MyClass {
  public static void main(String args[]) {
    int x = 43;
    if ((x > 10) && (x * 5)) {
      System.out.println("if block executing");
    } else {
      System.out.println("else block executing");
    }
  }
}

输出:

MyClass.java:4: error: bad operand types for binary operator '&&'
      if((x > 10) && (x*5)){
                  ^
  first type:  boolean
  second type: int
1 error

发生此错误是因为 && 操作数需要两个布尔操作数。

这里,表达式 x * 5 给出一个整数值。因此,这里的&& 运算符有一个整数操作数,并给我们带来 bad operand types 错误。

为了解决这个错误,我们将修改这个代码,使得 x * 5==21 返回一个布尔值。看下面修改后的代码:

public class MyClass {
  public static void main(String args[]) {
    int x = 43;
    if ((x > 10) && (x * 5 == 21)) {
      System.out.println("if block executing");
    } else {
      System.out.println("else block executing");
    }
  }
}

输出:

else block executing

Java 中 == 运算符的错误操作数类型

使用 == 等于运算符时,你可能会遇到相同的错误。如果传递的两个操作数都是不同的类型,它会给出一个错误的操作符错误。

看下面的例子:

public class MyClass {
  public static void main(String args[]) {
    int x = 43;
    String y = "43";
    if (x == y) {
      System.out.println("if block executing");
    } else {
      System.out.println("else block executing");
    }
  }
}

输出:

MyClass.java:5: error: bad operand types for binary operator '=='
      if(x == y){
           ^
  first type:  int
  second type: String
1 error

发生此错误是因为 == 等于运算符的操作数属于不同类型。一个是字符串,另一个是整数。

要解决此错误,我们必须转换其中一个以获得相同的数据类型。如果我们将整数转换为字符串,则比较将按词汇顺序进行。

因此,我们将字符串转换为 int。看下面修改后的代码:

public class MyClass {
  public static void main(String args[]) {
    int x = 43;
    String y = "43";
    if (x == Integer.parseInt(y)) {
      System.out.println("if block executing");
    } else {
      System.out.println("else block executing");
    }
  }
}

输出:

if block executing

Java 中 <= 运算符的错误操作数类型

与前面的案例示例一样,当两个操作数的类型不同时,<=(小于等于)运算符也可能给出 bad operator types 错误。看下面的例子:

public class MyClass {
  public static void main(String args[]) {
    int x = 43;
    String y = "43";
    if (x <= y) {
      System.out.println("if block executing");
    } else {
      System.out.println("else block executing");
    }
  }
}

输出:

MyClass.java:5: error: bad operand types for binary operator '<='
      if(x <= y){
           ^
  first type:  int
  second type: String
1 error

要解决此错误,我们必须转换其中一个以获得相同的数据类型。看下面修改后的代码:

public class MyClass {
  public static void main(String args[]) {
    int x = 43;
    String y = "43";
    if (x <= Integer.parseInt(y)) {
      System.out.println("if block executing");
    } else {
      System.out.println("else block executing");
    }
  }
}

输出:

if block executing

相关文章 - Java Error