Fix the Bad Operand Types Error in Java
-
Bad Operand Types for the
&
Operator in Java -
Bad Operand Types for the
&&
Operator in Java -
Bad Operand Types for the
==
Operator in Java -
Bad Operand Types for the
<=
Operator in Java

This tutorial introduces the bad operand types
error for binary operators in Java.
A binary operator is an operator which requires two operands. Operators such as arithmetic operators and relational operators are called binary operators.
Operators play a vital role in programming, and sometimes, a binary operator can give a bad operand types
error due to improper use. The bad operand types
error is a compile-time error when both types of operands are incompatible.
For example, we will get this error when comparing a string with an integer. This article will look at different examples of how this error occurs and how to resolve it.
Sometimes, the order of precedence of operators can also lead to incompatible operator types and result in an error to the console.
Bad Operand Types for the &
Operator in Java
Let’s first understand the most common case where bad operator error
can occur in Java code. Look at an example code below:
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");
}
}
}
Output:
MyClass.java:4: error: bad operand types for binary operator '&'
if( x & 21 == 1){
^
first type: int
second type: boolean
1 error
This error occurs because the precedence of the ==
(equals) operator is more than that of the &
operator. This leads to the 21 == 1
evaluation, which gives us a boolean value.
Now, notice the &
has one integer operand and one boolean. Since both the operators are of different types, the &
operator cannot work, so we get an error.
We will use parenthesis to indicate that x & 21
needs to be evaluated first to resolve this error. Look at the modified code below:
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");
}
}
}
Output:
if block executing
Bad Operand Types for the &&
Operator in Java
Similarly, if you are working with logical &&
(and) operator, then you may face bad operand types
error in some cases like the below example code:
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");
}
}
}
Output:
MyClass.java:4: error: bad operand types for binary operator '&&'
if((x > 10) && (x*5)){
^
first type: boolean
second type: int
1 error
This error occurs because the &&
operand expects two boolean operands.
Here, the expression x * 5
gives an integer value. Hence, the &&
operator here has an integer operand and gives us the bad operand types
error.
To resolve this error, we will modify this code such that x * 5==21
which returns a boolean value. Look at the modified code below:
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");
}
}
}
Output:
else block executing
Bad Operand Types for the ==
Operator in Java
You may get the same error when working with the ==
equals operator. It can give a bad operator error if both the operands passed are of different types.
Look at the example below:
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");
}
}
}
Output:
MyClass.java:5: error: bad operand types for binary operator '=='
if(x == y){
^
first type: int
second type: String
1 error
This error occurs because the operands of the ==
equals operator are of different types. One is a string, and the other one is an integer.
To resolve this error, we will have to convert one of them to get the same data types. If we convert integers into strings, the comparison will occur in lexicological order.
So, we will convert string to int. Look at the modified code below:
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");
}
}
}
Output:
if block executing
Bad Operand Types for the <=
Operator in Java
Like the previous case example, the <=
(less than equals to) operator can also give a bad operator types
error when both the operands are of different types. Look at the example below:
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");
}
}
}
Output:
MyClass.java:5: error: bad operand types for binary operator '<='
if(x <= y){
^
first type: int
second type: String
1 error
To resolve this error, we will have to convert one of them to get the same data types. Look at the modified code below:
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");
}
}
}
Output:
if block executing
Related Article - Java Error
- Fix the Error: Failed to Create the Java Virtual Machine
- Fix the Missing Server JVM Error in Java
- Fix the 'No Java Virtual Machine Was Found' Error in Eclipse
- Fix the Error: Failed to Create the Java Virtual Machine
- Javax.Net.SSL.SSLHandShakeException: Remote Host Closed Connection During Handshake
- Java.Lang.VerifyError: Bad Type on Operand Stack