이 글은 남궁성 님의 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
- 상수 또는 리터럴 간의 연산은 실행 과정 동안 변하는 값이 아니기 때문에, 컴파일 시에 컴파일러가 계산해서 그 결과로 대체함으로써 코드를 효율적으로 만든다.
- 수식에 변수가 들어가 있는 경우에는 컴파일러가 미리 계산할 수 없기 때문에 형변환이 필요하다.
- 형변환을 통한 버림(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 |
댓글