산술 연산자

+    // 더하기
-    // 빼기
*    // 곱셈
/    // 몫
%    // 나머지

❗ index 의 중앙 값을 구하는 로직의 경우 항상 오버플로우를 조심해야 함

int a = 2_100_000_000;
int b = 2_000_000_000;

int mid = a + ((b - a) / 2);
int mid = a + b >>> 1; // 모든 비트를 왼쪽으로 한칸 -> 나누기 2 한 것과 같음
int mid = (a + b) / 2; // overflow

 

 

비트 연산자

2 << 3 // 2를 비트로 나타낸 후 왼쪽으로 3비트 이동 == 2^3 곱한것과 같음 
                // 주의사항 : 부호부(제일왼쪽 부호결정하는 값)에 1이 들어가서 부호가 이상해질 수 있음
16 >> 3 // 16을 비트로 나타낸 후 오른쪽으로 3비트 이동 == 2^3 나눈것과 같음
                // 주의사항 : 부호부는 기존의 값(기존의 부호)를 계속 복사해서 옆으로 보냄
16 >>> 3 // 부호부와 관계없이 무조건 왼쪽 값이 0으로 채워짐(양수)

& // AND
| // OR
^ // XOR -> 교환법칙 성립 A^B^C^D == D^A^C^B
~ // NOT

| 을 사용하게 되면 if(조건) 에서 조건문에서 short-circuit 이 발생하지 않음
// short circuit 예제

int a = 0;
int b = 0;
if( a++ == 0 || b++ == 0) {
    System.out.println("Hello");
}

System.out.println(a);
System.out.println(b);

// 1
// 0
===================================

int a = 0;
int b = 0;
if( a++ == 0 | b++ == 0) {
    System.out.println("Hello");
}

System.out.println(a);
System.out.println(b);

// 1
// 1

 

 

관계 연산자

>
<
>=
<=
==
!=

 

 

논리 연산자

&&
||
!

 

 

instanceof

A instanceof B

A is kind of B 관계를 만족하면 true 아니면 false 를 반환한다.

결과가 true 라면 참조변수가 검사한 타입으로 형변환이 가능하다

null instanceof Integer // false

public class App {
    public static void main(String[] args) {
        Student me = new Student();
        if (me instanceof Student) { // true
            System.out.println("This is a Student instance.");
        }
        if (me instanceof JavaStudy) { // true
            System.out.println("This is a JavaStudy instance.");
        }
        if (me instanceof Object) { // true
            System.out.println("This is a an Object instance.");
        }
        System.out.println(Me.getClass().getName());
    }
}

class JavaStudy {

}
class Student extends JavaStudy {

}

출처 : https://yadon079.github.io/2020/java study halle/week-03#instanceof

 

assignment(=) operator

우측의 값을 좌측에 할당함.

기본타입의 경우 값을 복사

참조타입의 경우 객체의 주소값을 복사

 

화살표(→) 연산자

람다에서 사용되는 연산자이다.

 

3항 연산자

조건식 ? true일때 반환값 : false일때 반환값

빨라서 Javadoc을 보면 3항 연산자를 사용한 경우를 많이 볼 수 있음

 

연산자 우선순위

  1. . [ ] ( ) : 참조연산자, 배열 첨자, 괄호
  2. ! ~ ++ -- 부호(+,-)
  3. 산술연산자 * / %+ -
  4. 쉬프트 >> << >>>
  5. 비교 연산자 < > <= >= instanceof
  6. 비교 연산자 == !=
  7. 논리 &^|&&||
  8. 3항 연산자
  9. 대입 연산자

 

switch operatar

String time;

switch(weekday) {
    case MONDAY, FRIDAY -> time = "10:00 ~ 18:00";
    case TUESDAY, THURSDAY -> time = "10:00 ~ 16:00";
    default -> time = "휴일";
}

 

'Java' 카테고리의 다른 글

Whiteship Study Week2  (0) 2021.12.19
Whiteship Study Week 1  (0) 2021.11.14

+ Recent posts