Language/Java

[Java] 자바 연산자 - 산술, 대입, 증감, 비교, 논리, 비트, 삼항, instanceof (feat. 우선순위)

재은초 2024. 4. 6. 19:10
반응형

연산자(operator)

산술 연산자(arithmetic operator)

  • 산술 연산자는 사칙연산을 다루는 연산자로, 가장 기본적이면서도 가장 많이 사용되는 연산자 중 하나다.
  • 산술 연산자는 모두 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽이다.

int num1 = 8, num2 = 4;

System.out.println(num1 + num2);           // 12
System.out.println(num1 - num2);           // 4
System.out.println(num1 * num2);           // 32
System.out.println(num1 / num2);           // 2
System.out.println(num1 % num2);           // 0

대입 연산자(assignment operator)

  • 대입 연산자는 변수에 값을 대입할 때 사용하는 이항 연산자이며, 피연산자들의 결합 방향은 오른쪽에서 왼쪽이다.
  • 자바에서는 대입 연산자와 다른 연산자를 결합하여 만든 다양한 복합 대입 연산자를 제공한다.

int num1 = 7, num2 = 7, num3 = 7;

num1 = num1 - 3;
num2 -= 3;
num3 =- 3;                       // 단순히 -3를 변수 num3에 대입하는 연산

System.out.println(num1);        // 4
System.out.println(num2);        // 4
System.out.println(num3);        // -3

증감 연산자(increment and decrement operators)

  • 증감 연산자는 피연산자를 1씩 증가 혹은 감소시킬 때 사용하는 연산자로, 피연산자가 단 하나뿐인 단항 연산자다.
  • 증감 연산자는 해당 연산자가 피연산자의 어느 쪽에 위치하는가에 따라 연산의 순서 및 결과가 달라진다.

int num1 = 7, num2 = 7;
int result1, result2;

result1 = --num1 + 4;
result2 = num2-- + 4;

System.out.println(result1 + ", " + num1);      // 10, 6
System.out.println(result2 + ", " + num2);      // 11, 6
int x = 10;
int y = x-- + 5 + --x;                            // 10 + 5 + 8

System.out.println("x : "+ x + ", y : " + y);     // x : 8, y : 23

비교 연산자(comparison operator)

  • 비교 연산자는 피연산자 사이의 상대적인 크기를 판단하는 연산자다. 비교 연산자는 왼쪽의 피연산자와 오른쪽의 피연산자를 비교하여, 어느 쪽이 더 큰지, 작은지, 또는 서로 같은지를 판단한다.
  • 비교 연산자는 모두 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽이다.

char ch1 = 'a', ch2 = 'A';                  // 아스키코드로 A는 65, a는 97

System.out.println(ch1 == ch2);             // false
System.out.println(ch1 > ch2);              // true

논리 연산자(logical operator)

  • 논리 연산자는 주어진 논리식을 판단하여, 참(true)과 거짓(false)을 결정하는 연산자다.
  • AND 연산과 OR 연산은 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽이다.
  • NOT 연산자는 피연산자가 단 하나뿐인 단항 연산자이며, 피연산자의 결합 방향은 오른쪽에서 왼쪽이다.

char ch1 = 'b', ch2 = 'B';
boolean result1, result2;

result1 = (ch1 > 'a') && (ch1 < 'z') ;    // true && true
result2 = (ch2 < 'A') || (ch2 < 'Z') ;    // false || false

System.out.println(result1);         // true
System.out.println(result2);         // true
System.out.println(!result2);        // false

비트 연산자(bitwise operator)

  • 비트 연산자는 논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자다.
  • 비트 단위로 왼쪽이나 오른쪽으로 전체 비트를 이동하거나, 1의 보수를 만들 때도 사용된다.

int num1 = 8, num2 = -8;

System.out.println(~num1);            // -9
System.out.println(num1 << 2);        // 32
System.out.println(num2 >> 2);        // -2
System.out.println(num1 >>> 2);       // 2
System.out.println(num2 >>> 2);       // 1073741822

삼항 연산자(ternary operator)

  • 삼항 연산자는 자바에서 유일하게 피연산자를 세 개나 가지는 조건 연산자다.
  • 물음표(?) 앞의 조건식에 따라 결괏값이 참(true)이면 반환값1을 반환하고, 결괏값이 거짓(false)이면 반환값2를 반환한다.
조건식 ? 반환값1 : 반환값2
int num1 = 5, num2 = 7;
int result;

result = (num1 - num2 > 0) ? num1 : num2;
System.out.println("두 정수 중 더 큰 수는 " + result);     // 두 정수 중 더 큰 수는 7

instanceof 연산자

  • instanceof 연산자는 참조 변수가 참조하고 있는 인스턴스의 실제 타입을 반환해 준다.
  • 해당 객체가 어떤 클래스나 인터페이스로부터 생성되었는지를 판별해 주는 역할을 한다.
  • instanceof 연산자는 왼쪽 피연산자인 인스턴스가 오른쪽 피연산자인 클래스나 인터페이스로부터 생성되었으면 true를 반환하고, 그렇지 않으면 false를 반환한다.
인스턴스이름 instanceof 클래스또는인터페이스이름
class A {}
class B extends A {}

public static void main(String[] args) {

    A a = new A();
    B b = new B();

    System.out.println(a instanceof A); // true
    System.out.println(b instanceof A); // true
    System.out.println(a instanceof B); // false
    System.out.println(b instanceof B); // true
}

 

자바 연산자의 우선순위표

 

Reference

반응형