Java에서 잘못된 피연산자 유형 오류 수정

Mohammad Irfan 2023년10월12일
  1. Java의 & 연산자에 대한 잘못된 피연산자 유형
  2. Java의 && 연산자에 대한 잘못된 피연산자 유형
  3. Java의 == 연산자에 대한 잘못된 피연산자 유형
  4. Java의 <= 연산자에 대한 잘못된 피연산자 유형
Java에서 잘못된 피연산자 유형 오류 수정

이 자습서에서는 Java의 이진 연산자에 대한 잘못된 피연산자 유형 오류를 소개합니다.

이항 연산자는 두 개의 피연산자가 필요한 연산자입니다. 산술 연산자 및 관계 연산자와 같은 연산자를 이진 연산자라고 합니다.

연산자는 프로그래밍에서 중요한 역할을 하며, 때때로 이진 연산자는 부적절한 사용으로 인해 bad operand types 오류를 제공할 수 있습니다. bad operand types 오류는 두 유형의 피연산자가 호환되지 않을 때 컴파일 시간 오류입니다.

예를 들어 문자열을 정수와 비교할 때 이 오류가 발생합니다. 이 문서에서는 이 오류가 발생하는 방법과 해결 방법에 대한 다양한 예를 살펴봅니다.

때로는 연산자의 우선 순위가 호환되지 않는 연산자 유형으로 이어져 콘솔에 오류가 발생할 수도 있습니다.

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의 && 연산자에 대한 잘못된 피연산자 유형

유사하게, 논리적 &&(and) 연산자로 작업하는 경우 아래 예제 코드와 같은 경우에 bad operator error 오류가 발생할 수 있습니다.

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 operator error 오류가 발생합니다.

이 오류를 해결하기 위해 부울 값을 반환하는 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

이 오류는 == 등호 연산자의 피연산자의 유형이 다르기 때문에 발생합니다. 하나는 문자열이고 다른 하나는 정수입니다.

이 오류를 해결하려면 그 중 하나를 동일한 데이터 유형으로 변환해야 합니다. 정수를 문자열로 변환하면 사전순으로 비교가 발생합니다.

따라서 string을 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의 <= 연산자에 대한 잘못된 피연산자 유형

이전 사례의 예와 같이 <=(보다 작음) 연산자는 두 피연산자의 유형이 서로 다른 경우 잘못된 연산자 유형 오류를 제공할 수도 있습니다. 아래 예를 보십시오.

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