본문 바로가기
각종 언어 기본 문법/Java 주제별 정리

자바 스터디 노트 [3] 연산자

by 혀니쌤1 2021. 8. 8.

목차

    간편조건식: <조건~~> ? 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