Java 데이터 유형 오버플로우

1407 단어 Java 구문 지식

Java 데이터 유형 오버플로우

  • 1. 데이터 형식 오버플로우
  • 는 무엇입니까?
  • 2. 데이터 오버플로우의 원인
  • 3.데이터 오버플로우 문제를 방지하는 방법
  • 1. 데이터 형식 넘침은 무엇입니까


    먼저 코드 세그먼트를 살펴보겠습니다.
    	/**
         *     
         */
        private boolean isTimeout(Long time, Long interval) {
            if (lastTime + interval < time) {
                return false;
            }
            return true;
        }
    

    위의 코드 코드는 매우 간단하고 아무런 문제도 없는 것 같지만,interval이 Long으로 전송될 때.MAX_VALUE 시 오류가 발생합니다. Long.MAX_VALUE+lastTime 마이너스 isTimeout(time, Long.MAX VALUE) 는 영원히false가 되기 때문입니다.

    2. 데이터 과잉이 발생하는 원인


    Java의 유형은 모두 기호가 있고 가장 높은 위치는 기호 위치를 나타내며 값의 범위가 있는 기본 데이터 유형에 대응하는 패키징 클래스가bit에서 차지하는 값의 범위는 byte Byte 8 -2^7~2^7-1 short Short 16 -2^ 15~ 2^15-1 int Integer 32 -2^ 31~ 2^31-1 long Long 64 -2^ 63~ 2^63-1
    상례에서 Long.MAX_VALUE는 최대치 2^63-1,Long입니다.MAX_VALUE에 0보다 큰 수를 더하면 데이터가 수치 범위를 초과할 수 있습니다. Long.MAX_VALUE 1위가 0이면 플러스이고 1을 더하면 1위가 1이고 1위가 1이면 마이너스이며 수치 범위를 초과한 자리는 캡처되어 결과는 영원히 잘못된 것이다

    3. 데이터 넘침 문제를 어떻게 피할 것인가


    전례의 코드는 다음과 같이 변경할 수 있습니다.
    	/**
         *     
         */
        private boolean isTimeout(Long time, Long interval) {
            if (time - lastTime < interval) {
                return false;
            }
            return true;
        }
    

    위의 코드로 바꾼 후interval 데이터는 논리 조작을 하지 않을 뿐만 아니라 데이터가 넘치는 문제도 존재하지 않을 것이다. 물론 서로 다른 장면에 서로 다른 해결 방안이 있을 것이다.

    좋은 웹페이지 즐겨찾기