修复 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