백기선 자바 스터디 3: 다양한 연산자 - Sat, Dec 5, 2020
연산자에 대해 복습을 해 봅시다.
Jshell 사용하기
우선순위같은 간단한 코드를 테스트하기엔 Jshell도 좋다. 터미널에서 jshell
또는 IntelliJ에서 tools - run jshell로 실행 가능하다.
우선순위
. [] ()
: 참조연산자, 배열 첨자, 괄호가 제일 높다!! ~ & | ^ - ++ --
: 단항연산자도 우선순위가 높다. 부정 > bit > 부호 > 증감 순으로 우선순위를 가진다.- 쉬프트 연산자: 산술보다 쉬프트 연산자가 우선순위가 높다.
- 산술연산자
- 비교연산자
- 논리연산자
- 삼항연산자
- 대입연산자
조금 복잡하지만 단항 > 산술 > 비교 > 논리 > 삼항 > 대입이기 때문에 자연스럽다!
산술연산자
2항 연산자
+ - * / %
* / %
간의 우선순위는 동등하고+ -
보다는 높다.
단항 연산자
++, --
int a = 3;
int b = 3;
a++ == 3; true
++b == 3; false
비트 연산자
&: and
|: or
^: xor
~: bitwise compliment 보수 연산자(?) 비트의 1과 0을 바꿈
<<: left shift
>>: right shift
>>> : zero fill right shift: 왼쪽을 0으로 채우므로 음수의 경우 부호가 바뀐다.
- 팁: 비트 연산자를 논리 연산자로 사용하면 short circuit이 동작하지 않는다.
관계 연산자
== != > < >= <=
- 특이사항 없음
논리 연산자
&& || !
- if 문 안에서는 short circuit이 동작하므로 주의하자!
- and의 우선순위가 or 보다 우선순위가 높다. 이것도 조심해야 함!
instanceof
null instanceof Object //false
String a = "hello"
a instanceof Object //true
List <Integer> b = new ArrayList()<>;
b instanceof List //true
b instanceof ArrayList //true
assignment(=) operator
- 기본타입은 값을 복사
- 참조타입은 객체의 주소값을 복사
화살표(->) 연산자
- 람다 함수 작성에 사용됨
- 람다는 구현 메소드가 하나 있는 인터페이스 대신에 사용될 수 있음
- 클로저가 되므로 매우 유용하고 코드가 간결해 짐
3항 연산자
- 편한데 사용하지 말라고 권장하는 곳이 많다.
int a = x > 3 ? 1 : 2
Java 13 switch 연산자
- 구글링을 해 보니
yield
연산자가 추가되었다! python의 for -else 에 이어 매우 신기한 문법이 등장했다. ->
오퍼레이터도 추가됨
Day day = Day.WEDNESDAY;
System.out.println(
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
default -> throw new IllegalStateException("Invalid day: " + day);
}
);