본문 바로가기
Back-End/Java

연산자(Operator)

by 달의 조각 2021. 11. 16.
이 글은 남궁성 님의 Java의 정석 책을 바탕으로 정리한 글입니다.

 

  • 우선 순위: 산술(사칙 연산, 나머지, 쉬프트) > 비교 > 논리 > 대입 > 기타(형변환, 삼항, instanceof)
  • 정수형은 0을 나눌 수 없다. ArithmeticException
  • 문자 '2(2가 아니어도 된다)'를 숫자로 변환하려면 문자 '0'을 빼 주면 된다 → 50 - 48 = 2
char c1 = 'a';

// char c2 = c1 + 1; 컴파일 에러, 문자형과 정수형 연산은 결과가 정수형이므로 char에 담을 수 없다
char c2 = 'a' + 1; // 'a' + 1이 리터럴 간의 연산이기 때문에 에러 발생하지 않음

System.out.println(c2); // b
  1. 상수 또는 리터럴 간의 연산은 실행 과정 동안 변하는 값이 아니기 때문에, 컴파일 시에 컴파일러가 계산해서 그 결과로 대체함으로써 코드를 효율적으로 만든다.
  2. 수식에 변수가 들어가 있는 경우에는 컴파일러가 미리 계산할 수 없기 때문에 형변환이 필요하다.

 

  • 형변환을 통한 버림(int 타입의 활용)
float pi = 3.141592f;
float shortPi = (int)(pi * 1000) / 1000f; // 3.141

 

  • 형변환을 통한 반올림(0.5 더하기)
double pi = 3.141592;
double shortPi = (int)(pi * 1000 + 0.5) / 1000.0; // 3.142

 

  • Math.round(): round 메서드는 매개변수로 받은 값을 소수점 첫째 자리에서 반올림, 결과를 정수로 돌려 준다.
double Pi = 3.141592;
double shortPi = Math.round(pi * 1000) / 1000.0; // 3.142

 

System.out.pirntln(-10%8); // -2
System.out.pirntln(10%-8); // 2
System.out.pirntln(-10%-8); // -2

 

 

문자열의 비교

비교 연산자 ==은 두 문자열이 완전히 같은지(같은 객체인지) 비교

String str = new String("abc");
// String str = "abc"; 위의 문장을 간단히 표현, String만 허용

boolean result = str.equals("abc");

 

String str1 = "abc"
String str2 = new String("abc");

"abc" == "abc" ? true
str1 == "abc" ? true
str2 == "abc" ? false

strl.equals("abc")); // true
str2.equals("abc")); // true
str2.equals("ABC")); // false
strl.equalsIgnoreCase("ABC")); // true
  • 리터럴로 만든 문자열은 모두 같은 주소를 갖는다. (Constant pool)
  • new String()으로 만든 문자열은 모두 다른 주소를 갖는다.
  • 내용은 같지만 서로 다른 객체라서 false를 결과로 얻는다. equals()는 객체가 달라도 내용이 같으면 true를 반환

 

  • ^ (XOR 연산자): 피연산자의 값이 서로 다를 때에만 1을 결과로 얻는다. 같을 때는 0을 얻는다.
    → 같은 값으로 두고 연산 수행 시 원래의 값으로 돌아오는 특징, 간단한 암호화에 사용
  • X << n은 x * 2n
    X >> n은 x / 2n

'Back-End > Java' 카테고리의 다른 글

객체지향 프로그래밍 Ⅱ  (0) 2021.12.16
객체지향 프로그래밍 Ⅰ  (0) 2021.12.02
배열(array)  (0) 2021.11.25
변수(variable)  (0) 2021.11.15
Java란?  (0) 2021.11.15

댓글