[java] Java에서 long을 int로 변환하려면 어떻게해야합니까?

Java에서 long을 int로 변환하려면 어떻게해야합니까?



답변

Java 8에서 업데이트되었습니다.

Math.toIntExact(value);

원래 답변 :

간단한 유형 캐스팅이 수행해야합니다.

long l = 100000;
int i = (int) l;

그러나 큰 숫자 (일반적으로보다 크 2147483647거나 작은 -2147483648)는 일부 비트를 잃고 잘못 표시됩니다.

예를 들어 2147483648로 표시됩니다 -2147483648.


답변

Long x = 100L;
int y = x.intValue();


답변

작은 값의 경우 캐스팅으로 충분합니다.

long l = 42;
int i = (int) l;

그러나,이 long보다 더 많은 정보를 저장할 수 int는 완벽하게 변환 할 수 없습니다, 그래서 longint일반적인 경우. 는 경우 long보다 작은 수를 보유하거나 동일 Integer.MAX_VALUE정보를 잃지 않고 주조로 변환 할 수 있습니다.

예를 들어, 다음 샘플 코드는

System.out.println( "largest long is " + Long.MAX_VALUE );
System.out.println( "largest int is " + Integer.MAX_VALUE );

long x = (long)Integer.MAX_VALUE;
x++;
System.out.println("long x=" + x);

int y = (int) x;
System.out.println("int y=" + y);

내 컴퓨터에서 다음 출력을 생성합니다.

largest long is 9223372036854775807
largest int is 2147483647
long x=2147483648
int y=-2147483648

에서 음수 부호를 확인하십시오 y. 때문에 x에 Integer.MAX_VALUE보다 값이 큰 하나의 개최 int y를 개최 할 수 없습니다. 이 경우 음수로 감쌌습니다.

이 사례를 직접 처리하려면 다음과 같은 작업을 수행하십시오.

if ( x > (long)Integer.MAX_VALUE ) {
    // x is too big to convert, throw an exception or something useful
}
else {
    y = (int)x;
}

이 모든 것은 양수를 가정합니다. 음수 MIN_VALUE의 경우`MAX_VALUE ‘대신 사용하십시오


답변

Java 8부터 다음을 사용할 수 있습니다. Math.toIntExact (long value)

JavaDoc : Math.toIntExact를 참조하십시오.

long 인수의 값을 반환합니다. 값이 int에 오버플로되면 예외가 발생합니다.

Math.toIntExactJDK 8 의 소스 코드 :

public static int toIntExact(long value) {
    if ((int)value != value) {
        throw new ArithmeticException("integer overflow");
    }
    return (int)value;
}


답변

Guava 라이브러리를 사용하는 경우 로 변환 하는 방법 Ints.checkedCast(long)과 방법이 있습니다 .Ints.saturatedCast(long)longint


답변

long x = 3;
int y = (int) x;

그러나는가로 long표현 될 수 있다고 가정합니다 int. 둘 사이의 차이점을 알고 있습니까?


답변

기본 및 호출 Long대신 래퍼를 사용할 수 있습니다long

Long.intValue()

Java7 intValue () 문서

long에 맞게 값을 반올림 / 잘라냅니다 int.