| 산술에 관한 연산자 (+,-,*,/,%)
| 연산자의 좌,우 값을 더하는 연산자
int a = 3;
int b = 4;
System.out.println(a+b); // 7
| 연산자 좌측 값에서 우측 값을 빼는 연산자
int a = 10;
int b = 4;
System.out.println(a-b); //6
| 연산자의 좌측 값과 우측 값을 곱하는 연산자
int a = 3;
int b = 6;
System.out.println(a*b); //18
| 나눗셈을 실행한 뒤 생기는 몫을 반환하는 연산자
int a = 17;
int b = 3;
System.out.println(a/b); //5
| 나눗셈 실행시 생기는 나머지를 반환하는 연산자
int a = 17;
int b = 3;
System.out.println(a%b); //2
| 비트 단위의 연산을 위한 연산자
| 같은 위치의 bit간에 둘 다 1일 경우 1, AND연산
A = 10110001
B = 11011101
---------------
A&B = 10010001
| 같은 위치의 bit간에 하나라도 1일 경우 1, OR연산
A = 10110001
B = 11011101
---------------
A|B = 11111101
| 같은 위치의 bit간에 하나만 1일 경우 1, XOR연산
A = 10110001
B = 11011101
---------------
A^B = 01101100
| bit의 0과 1을 바꿔줌
~10110001 = 01001110
| 비교 연산자라고도 하며 관계연산자의 결과는 boolean 자료형으로 반환
연산자 | 기능 | 연산 예 |
---|---|---|
'>' | 왼쪽 항이 크면 참, 아니면 거짓 반환 | num>3; |
'<' | 왼쪽 항이 작으면 참, 아니면 거짓 반환 | num<3; |
'>=' | 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓 반환 | num>=3; |
'<=' | 왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓 반환 | num<=3; |
'==' | 두 개 항 값이 같으면 참, 아니면 거짓 반환 | num==3; |
'!=' | 두 개 항이 다르면 면 참, 아니면 거짓 반환 | num!=3; |
| 비교연산자를 통해 도출된 true/false에 대한 논리 조합
연산자 | 기능 | 연산 예 |
---|---|---|
'&&' | 두 항이 모두 참인 경우 참, 아니면 거짓 반환 | val = (5>3) && (5>2); |
'll' | 두 항 중 하나의 항만 참이면 참, 아니면 거짓 반환 | val = (5>3) |
'!' | 참인 경우는 거짓으로, 거짓인 경우는 참으로 바꿈 | val = !(5>3); |
| 객체 타입을 확인하는 연산자로 형변환 가능여부를 확인함
Parent parent = new Parent();
Child child = new Child();
System.out.println( parent instanceof Parent ); // true
System.out.println( child instanceof Parent ); // true
System.out.println( parent instanceof Child ); // false
System.out.println( child instanceof Child ); // true
| 우측의 값을 좌측에 대입한다는 규칙을 가진 연산자
int a = 100; // a에 100 대입
int b = 50; //b에 50 대입
| 익명함수라고 불리는 람다가 등장하며 사용되는 연산자
| 익명 함수(Anonymous functions)를 지칭하는 용어
| 함수의 이름이 없는 함수
| 식별자 없이 실행가능한 함수
(int x) -> x+1
(x) -> x+1
x -> x+1
(int x) -> { return x+1; }
x -> { return x+1; }
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello");
}
}).start();
new Thread(()->{
System.out.println("Hello");
}).start();
| if/else 구조로 간단하게 쓸 수 있는 조건연산자
(조건식) ? 피연산자1(true일경우):피연산자2(false일경우)
boolean 조건이 참일 경우 피연산자1
boolean 조건이 거짓일 경우 피연산자2
3항 연산자를 사용할 경우
int a1 = (5>4) ? 50 : 40; // 조건식이 true이므로 a1은 50
if-else문을 사용할 경우
int a2 = 0;
if(5>4){
a2 = 50;
}
else{
a2 = 40;
}
우선순위 | 연산자 종류 | 연산자 예 |
---|---|---|
1 | 괄호 | () [] |
2 | 전위연산자 | ++a, --b |
3 | 산술연산자 | +,=,*,/,% |
4 | 시프트연산자 | <<,>> 등 |
5 | 비교연산자 | <,<=,>,>=,==,!= |
6 | 대입연산자 | =,+=,-=,*=,/= 등 |
7 | 후위연산자 | a++, b-- |
[Java 12]
->(화살표) 표현이 가능하고 data만 존재할 경우 return이 가능하다.
-> 구문을 사용할 경우 break;를 적지 않아도 다음 case 구문으로 넘어가지 않는다.
-> 표현 오른쪽은 꼭 단일 수행일 필요는 없다. 블록 {} 안에서의 작업도 가능하다.
[Java 13]
<Java 12이전의 switch case 문법>
int num = 1;
int returnNum = 0;
switch(num){
case 1:
returnNum = 1;
System.out.println("1");
break;
case 2:
returnNum = 2;
System.out.println("2");
break;
case 3:
returnNum = 3;
System.out.println("3");
break;
}
이전 자바 switch case의 문제점
<Java 12의 switch case 문법>
returnNum = switch(num){
case 1 -> 1;
case 2 -> 2;
default -> throw new IllegalStateException("Unexpected value: " + num);
};
<Java 13의 switch case 문법>
returnNum = switch(num){
case 1 : yield 3;
default : throw new IllegalStateException("unexpected value : " + num);
};