목차
간편조건식: <조건~~> ? A:B; if 조건~~이 True이면 A, False이면 B
간편대입식: +=, -=, *=, /=, %=, &=, ^=, :=, <<=, >>=, >>>= 우변의 값을 좌변에 넣는 것. 비트 연산도 간편식 가능
논리: !, &, &&, |, ||
비트: ~, &, |, ^ not, and, or, xor
쉬프트: >>, <<, >>> 비트를 좌측/우측으로 밀어서 이동
#연산 순서:
4칙연산에서 따로 덧셈/뺄샘 보다 곱셈/나눗셈을 먼저 묶어 계산하듯, 논리vs비교 연산에도 순서가 있음
&&보다는 >,< 비교 연산자가 더 우선임. 예: x>3 && y<=10
'*' 또는 '/' 또는 '%' 같은 이항 연산자는 왼쪽에서 오른쪽으로 계산. 예: 100*2/3%5 → 1
'=' 같은 단항 연산자는 오른족에서부터 왼쪽으로 계산: 예: a = b = c = 4321
System.out.println("i"+2+3)은 "i23"출력 왼쪽부터 순서대로 계산이고, 스트링이 먼저 자리 잡았기 때문
System.out.println("3+2+"i")는 "5i"출력 왼쪽부터 순서대로 계산이고, 정수가 먼저 자리 잡았기 때문
#++a와 a++의 차이
a++ ; 다른 연산을 수행시킨 후, a값을 1 증가. 이 선언문이 끝나고 (줄이 바뀌고) a가 1이 증가
int b=20; int a = b++*10, System.out.println(a); → 200출력
++a ; 다른 연산을 수행시킨 전, a값을 1 증가. 이 선언문에서 (줄이 바뀌기 전에도) a가 1이 증가
int b=20; int a = ++b*10, System.out.println(a); → 210출력
#NaN과 Inf
5/0, 5%0 같은 경우 컴파일은 되지만, 실행 시 Arithmetic Exception 발생
단, 정수가 아닌 float로 나누면 에러 발생 안됨 (??잉? 이건 신기함) 5/0.0 → Inf , 5%0.0 → NaN
참고 메소드 : isInfinite(), isNaN(), valueOf()
#문자 비교, 문자열 비교
char은 아스키코드 기반 대소 비교 가능, 그래서 a가 A보다 큼
스트링은 대소 비교 불가능. 한글자짜리 스트링이라도 대소 비교 불가능. (애초에 스트링은 기본 변수가 아닌 참조 변수)
단, 스트링 끼리 같냐 다르냐는 볼 수 있음. (주소값이 같으면 동일). 자바는 스트링 리터럴이 같으면 동일 스트링을 참조
예: String name1 = "Andy", String name2 = "Andy", System.out.println(name1 == name2); → True 출력
단 도플갱어처럼 동일 리터럴이더라도 다르게 (주소 번지를 다르게 설정) 만들 수 있는데, 이게 new 연산임.
※ new : 객체 생성 연산자로 새 주솟값이 할당
예: String name1 = "Andy", String name2 = new String "Andy", System.out.println(name1==name2); → False 출력
만약 동일 객체 비교 (번지수 비교) 아닌 letter by letter 대조를 하고 싶다면, equals() 메소드를 사용하자.
예: String name1 = "Andy", String name2 = new String "Andy", System.out.println(name1.equals(name2); → True