티스토리 뷰
1. 산술 연산자
+ - * / % << >>
사칙연산, 나머지 연산
연산자의 우선순위에 의해서 연산순서가 결정됨
쉬프트 연산자(<<)는 덧셈 연산자보다 우선순위가 낮음
2. 비트 연산자
& | ^ ~ << >>
비트단위로 논리 연산
피연산자 -> 이진수로 표현한 후 각자리를 아래 표와 같이 연산함
x | y | x|y | x&y | x^y |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 1 |
0 | 0 | 0 | 0 | 0 |
x | ~x |
1 | 0 |
0 | 1 |
8<<2 : 10진수 8의 2진수를 왼쪽으로 2자리 이동
8 : 00001000
8<<2 : 00100000
x<<n = x * 2의 n제곱
x>>n = x / 2의 n제곱
3. 관계 연산자
> < >= <= == !=
크고 작음과 같고 다름을 비교
true, false를 반환
숫자 비교
10.0 == 10.0f : true
0.1 == 0.1f : false
0.1 (double 형) 은 0.1f 보다 적은 오차로 저장되므로 false
float f = 0.1f; // 0.10000000149011612
double d = 0.1; // 0.10000000000000001
문자열 비교
String str1 = "abc";
String str2 = new String("abc");
"abc" == "abc" : true
str1 == "abc" : true
str2 == "abc" : false
str2.equals("abc") : true
4. 논리 연산자
&& || !
'그리고(AND)'와 '또는(OR)'으로 조건을 연결
x | y | x||y | x&&y |
true | true | true | true |
true | false | true | false |
false | true | true | false |
false | false | false | false |
x | !x |
true | false |
false | true |
5. instanceof
참조 변수가 참조하고 있는 인스턴스의 실제 타입 확인
참조 변수 instanceof 클래스명
instanceof로 true가 나오면 참조 변수가 검사한 타입으로 형변환이 가능
6. assignment(=) operator
x = y = 3;
y = 3 먼저 수행 후 y = x 수행된다.
i *= 10 + j;
i = i * (10 + j);
7. 화살표(->) 연산자
JDK1.8 부터 추가됨
객체지향 언어인 동시에 함수형 언어가 됨
int[] arr = new int[5];
Arrays.setAll(arr, (i) -> (int)(Math.random()*5)+1);
int max (int a, int b) {
return a > b ? a : b;
}
(int a, int b ) -> { return a > b ? a : b; }
return 대신 식(expression) 으로 대신 할 수 있음
(int a, int b) -> a > b ? a : b
추론이 가능한 경우는 매개변수 타입도 생략 가능
(a, b) -> a > b ? a : b
매개 변수가 하나인 경우에 괄호 생략 가능
a -> a * a
중괄호 안의 문장이 return 문일 경우 괄호 생략 불가능
(int a, int b) -> { return a > b ? a : b; } // 중괄호 생략 불가능
Object 타입으로 형변환 불가능
Object obj = (Object) ( () -> {} ); // 에러
8. 3항 연산자
조건식 ? 식1 : 식2
조건식이 true 인 경우, 연산결과는 식1
조건식이 false 인 경우, 연산결과는 식2
result = ( x > y ) ? x : y ;
괄호는 필수가 아님
if 문으로 바꾸면?
if (x > y)
result = x;
else
result = y;
중첩 해서 사용할 수 있다
result = x > 0 ? 1 : (x == 0 ? 0 : -1);
타입이 다른 경우, 이항 연산자 처럼 산술 변환이 발생한다
x = x + ( mod < 0.5 ? 0 : 0.5 ) // 연산결과는 double 타입
9. 연산자 우선 순위
1. 산술 > 비교 > 논리 > 대입
2. 단항(1) > 이항(2) > 삼항(3)
3. 모든 연산의 진행방향은 왼쪽 -> 오른쪽, 단항 연산자와 대입 연산자 제외
10. (optional) Java 13. switch 연산자
// java 12 이전
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;
}
System.out.println("returnNum : [ " + returnNum + " ]");
//Java 12
returnNum = switch(num){
case 1 -> 1;
case 2 -> 2;
default -> throw new IllegalStateException("Unexpected value: " + num);
};
System.out.println("returnNum : [ " + returnNum + " ]");
//Java13
returnNum = switch(num){
case 1 : yield 1;
case 2 : yield 2;
default : throw new IllegalStateException("unexpected value : " + num);
};
System.out.println("returnNum : [ " + returnNum + " ]");
출처 :
자바의 정석
'개발 > Java Study' 카테고리의 다른 글
6주차 : 상속 (0) | 2021.02.13 |
---|---|
5주차 : 클래스 (0) | 2021.02.12 |
4주차 : 제어문 (0) | 2021.02.09 |
2주차 : 자바 데이터 타입, 변수 그리고 배열 (0) | 2021.02.01 |
1주차 : Java application의 실행 과정 (0) | 2021.01.27 |