산술 연산자
+ // 더하기
- // 빼기
* // 곱셈
/ // 몫
% // 나머지
❗ 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항 연산자를 사용한 경우를 많이 볼 수 있음
연산자 우선순위
. [ ] ( )
: 참조연산자, 배열 첨자, 괄호! ~ ++ -- 부호(+,-)
- 산술연산자
* / %
→+ -
- 쉬프트
>> << >>>
- 비교 연산자
< > <= >= instanceof
- 비교 연산자
== !=
- 논리
&
→^
→|
→&&
→||
- 3항 연산자
- 대입 연산자
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 |