archive
[이것이 자바다] 03 연산자 본문
1. 오버플로우와 언더플로우
-오버플로우(Overflow)란, 타입이 허용하는 최대값을 벗어나는 것을 이야기하며, 반대로 언더플로우(underflow)는 타입이 허용하는 최소값을 벗어나는 것을 이야기한다.
-오버플로우와 언더플로우가 발생되면 실행에러를 발생시키는 것이 아닌 해당 정수 타입의 최소값(오버플로우의 경우) 혹은 최대값(언더플로우의 경우)으로 되돌아간다.
- 예를 들어, byte 타입의 경우 최대값 127에서 1을 더하면 128이 되어 오버플로우가 발생, 연산의 결과는 -128이 되며 1을 더하여도 127로 복귀하지 않고 -127이 된다.
byte value = 127;
value++;
System.out.println(value); //-128
-마찬가지로 -128에서 1을 뺴면 -129가 되어 언더플로우가 발생하는데, 연산 결과는 최대값인 127이 되며 마찬가지로 -1을 한다고 하더라도 다시 -128로 복귀하지 않고 연산 결과는 126이 된다.
-byte 타입이 아닌 short, int, long 타입은 값의 범위만 다를 뿐 오버플로우 및 언더플로우가 발생하였을 때 마찬가지로 최소값 및 최대값으로 되돌아간다.
2. 나눗셈 연산 후 NaN과 Infinity 처리
- 나눗셈(/) 혹은 나머지 (%) 연산에서 좌측 피연산자가 정수이고 우측 피연산자가 0일 경우 예외 (Arithmetic Exception)이 발생하며 이유는 무한대의 값을 정수로 표현할 수 없기 때문이다.
-그러나 좌측 피연산자가 실수이거나, 우측 피연산자가 0.0 또는 0.0f이면 예외가 발생하지 않고 연산의 결과는 Infinity 또는 NaN(Not a Number)가 된다.
5/0.0 의 경우 연산의 결과는 Infinity 5%0.0의 결과는 NaN |
-Infinity 또는 NaN 상태에서 계속해서 연산을 수행하면 데이터가 엉망이 될 수 있으므로 이를 확인하는 작업이 필수적으로 선행되어야 한다.
-/ 와 % 연산의 결과가 Infinity 또는 NaN인지 확인하기 위해서는 Double.isInfinite()와 Double.isNaN() 메소드를 사용한다. 이렇게 하면 변수값이 Infinity 또는 NaN일 경우 true를, 그렇지 않다면 false를 산출한다.
3.문자열 비교연산자
-문자열을 비교할 때에는 동등연산자(==,!=) 대신 equals(), !equals() 메소드를 사용한다
- 그 이유는 5장에서 자세히 설명 ++링크 달기
'Java > Java 개념 정리' 카테고리의 다른 글
[이것이 자바다] 06 클래스 - 1 (0) | 2023.04.07 |
---|---|
[이것이 자바다] 05 참조 타입 (0) | 2023.03.19 |
[이것이 자바다] 04 조건문과 반복문 (0) | 2023.03.19 |
[이것이 자바다] 02 변수와 타입 (0) | 2023.03.19 |
자바 Math.random() 메소드 정리 (0) | 2023.02.24 |