본문 바로가기
JAVA

연산자

by e-pd 2020. 11. 22.

https://github.com/whiteship/live-study/issues/3

 

산술 연산자

  • 숫자를 표현하는 자료형만 피연산자로 사용 (문자열 더하기 제외)
  • boolean에서는 사용할 수 없다
  • 문자열(char)가능 
1
2
3
4
5
6
public static void main( String[] args) {
        int a = 10 + 20;
        char c = 'b' + 10;
        
        boolean isTrue = true + false;   // Error
}
cs
	//부호 연산자
        int num1 = 10;
        int num2 = +num1;
        int num3 = -num1;

        System.out.println(num1);   // 10
        System.out.println(num2);   // 10
        System.out.println(num3);   // -10
        //증감 연산자
        int num1 = 10;
        int num2 = ++num1;
        int num3 = num1++;
        int num4 = --num1;
        int num5 = num1--;
  

비트연산자

  • << 연산자 : 비트를 왼쪽으로 이동
  • >> 연산자: 비트를 오른쪽으로 이동
  • 오른쪽 피연사를 통해 몇 칸 움직이는지 정한다
  • >>> : 부호없는 비트이동 연산자, 오른쪽 이동후 남은공간을 '0'으로 채움
1
2
3
4
5
6
7
 public static void main( String[] args) {
 
        int num1 = 14;          // 00001110
        int num2 = 14 << 1;     // 00011100
        int num3 = 14 >> 1;     // 00000111
 
}
cs

 

관계 연산자

관계 비교를 통해 boolean값을 리턴한다.

 

  • > : 왼쪽의 값이 크면 true, 작으면 false 반환
  • < : 오른쪽의 값이 크면 true, 작으면 false 반환
  • >=: 왼쪽의 값이 크거나 같으면 true, 작으면 false 반환
  • <= : 오른쪽의 값이 왼쪽과 크거나 같으면 true, 작으면 false 반환
  • == : 두항의 값이 같으면 true, 아니면 false를 반환
  • != : 두항이 같지 않으면 true 아니면 false를 반환

 

논리 연산자

논리연산자는 논리곱(&&,&) 논리합(||,|), 배타적 논리합 (^) 논리부정(!) 연산을 수행한다.

피연산자는 boolean 타입만 사용할 수 있다. 결과는 boolean값

 

&&, &  피연산자가 모두 true일 경우,  true
||, |  피연산자 중 하나만 true일 경우,  true 
피연산자가 서로 다른 값일 경우,  true
! true는 false로 false는 true로 바꾼다.

 

1
2
3
4
5
6
7
8
9
public static void main( String[] args) {
        boolean a1 = true;
        boolean b1 = false;
 
        System.out.println(a1 && b1);   // false
        System.out.println(a1 || b1);   // true
        System.out.println(a1 ^ b1);    // true
        System.out.println(!a1);        // false
}
cs

 

instance of

변수명 instanceof 클래스명

 

개체가 특정 클래스 인스턴스인지 판단하는 연산자

맞으면 true, 틀리면 false 반환

1
2
3
4
5
6
public static void main( String[] args) {
        Bird duck = new Duck();
        Dog dog = new Dog();
        System.out.println(duck instanceof Bird);   // true
        System.out.println(dog instanceof Bird);    // false
}
cs

 

손주의 관계에서도 instance of 를 사용할 수 있다 ( puppy -> dog -> animal 관계를 상속 관계가 존재한다 가정하자)

1
2
3
4
5
6
7
public static void main( String[] args) {
        Animal dog = new Dog();
        Animal puppy = new Puppy();
 
        System.out.println(dog instanceof Animal);   // true
        System.out.println(puppy instanceof Animal);    // true
}
cs

 

RTTI (Run Time Type Identification)

런타임중에 어떤 타입의 오브젝트인지 확인하는 방법을 제공한다

 

  • getClass() : 런타임 클래스의 정보를 가져온다 
  • getClass().getName() : 패키지 경로를 포함한 클래스명을 가져온다.
1
2
3
4
5
6
public static void main( String[] args) {
        Animal dog = new Dog();
 
        System.out.println(dog.getClass());   // class com.java.study.Dog
        System.out.println(dog.getClass().getName());    // com.java.study.Dog
}
cs

 

 

assignment(=) operator

변수에 값을 대입할 때 사용하는 이항 연산자이며, 피연산자들의 결합 방향은 오른쪽에서 왼쪽

  • = : 왼쪽 피연산자에 오른쪽 피연산자를 대입한다.

 

  • 값형의 경우 값을 복사한다. 
int age = 10;
int age2 = age;
age = 20;

  • 참조형일 경우 대입시 얕은 복사가 일어난다.
BungOh ppang = new BungOh();
BungOh ppang2 = ppang;

 

 

화살표(->) 연산자

Java8 에서 도입 ( docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html)

( parameters ) -> { expression body }

 

람다 파라미터 리스트와 바디를 구분 

 

 

 

3항 연산자 (tenary operator)

조건식 ? 피연산자1 : 피연산자2

조건식의 참이라면 결과는 피연산자1이 선택되고, 거짓이라면 피연산자2 선택된다. 

 

3항 연산자를 쓰는 것이 좋은 방법인지는 다양한 의견이 있다.  하지만 복잡한 조건식에서는 쓰지않는 것을 권장하는 분위기이다.

www.reddit.com/r/AskProgramming/comments/9x33c9/ternaryconditional_operator_is_it_a_good_practice/

 

 

연산자 우선 순위

우선순위 연산자 연산자 결합 방식
1 exp++   exp-- ->
2 ++exp   --exp  +exp  -exp  ~  ! ->
3 *    /     % ->
4 +   - ->
5 <<   >>   >>> ->
6 <  >   <=   >=   instanceof ->
7 ==    != ->

 

docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

 

Operators (The Java™ Tutorials > Learning the Java Language > Language Basics)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com

 

Java13, switch 연산자

Java12에서 switch expressions 기능이 추가되었다.

switch 문에서  ' : ' 대신 '->'을 사용할 수 있다.  

 

arrow를 사용하면 기존에 쓰던 break를 생략해서 사용할 수 있다

 

1
2
3
4
5
6
7
8
static void print (int k) {
        switch (k) {
            case 1  -> System.out.println("SUNDAY");
            case 2  -> System.out.println("MONDAY");
            case 3  -> System.out.println("TUESDAY");
            default -> System.out.println("DAY");
        }
}
cs

 

Java 13에서는 switch 에 yield 가 생겼다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
switch (LANGUAGE) {
    case PYTHON  -> {
        System.out.println("PYTHON");
        yield 1;
    }
    case JAVASCRIPT -> {
        System.out.println("JAVASCRIPT");
        yield 2;
    }
    default -> {
        System.out.println("JAVA");
        yield 0;
    }
}
cs

docs.oracle.com/en/java/javase/13/language/switch-expressions.html

 

Java Language Updates

Java SE 12 introduced switch expressions, which (like all expressions) evaluate to a single value, and can be used in statements. It also introduced "arrow case" labels that eliminate the need for break statements to prevent fall through. Based on develope

docs.oracle.com

 

'JAVA' 카테고리의 다른 글

JUnit5  (0) 2020.12.05
제어문  (0) 2020.12.05
자바 데이터 타입, 변수 그리고 배열  (0) 2020.11.17
JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가  (0) 2020.11.17
Interface default methods  (0) 2020.10.19