Java에서 int에서 Long으로 어떻게 변환합니까?


219

여기에 모두를 찾아 계속 구글 사람들로부터가는 문제 필요 longint하지 다른 방법으로 주위를. 그러나 나는이 시나리오를 시작하기 전에이 시나리오를 실행 한 유일한 사람이 아니라고 확신 int합니다 Long.

내가 찾은 유일한 다른 답변은 "처음에는 길게 설정했다"는 것인데 실제로 질문을 다루지 않습니다.

처음에 캐스팅을 시도했지만 " Cannot cast from int to Long"가 표시됩니다.

for (int i = 0; i < myArrayList.size(); ++i ) {
    content = new Content();
    content.setDescription(myArrayList.get(i));
    content.setSequence((Long) i);
    session.save(content);
}

내가 조금 당황했다고 상상할 수 있듯이 int일부 콘텐츠가 들어 오고이 ArrayList정보를 저장하는 엔티티에는 시퀀스 번호가 Long이기 때문에 사용이 중단되었습니다.


for (long i = 0; i <myList.size (); ++ i)도 작동
Instantsoup

@Instantsoup 네, 루프에서도 작동합니다.하지만 질문의 맨 아래에 지정한 것처럼, 작업중인 ArrayList는 가져올 인덱스 위치를 지정할 때 기본 int가 필요합니다.
Ghosty

long longValue = intValue | 0L;
Daniel Jipa

내가 한 것은 : 캐스트 intlong먼저 다음 할당 longLong. 예 :int x = 2; Long y = (long)x;
Eric Wang

답변:


244

캐스트 long와 캐스트 사이에는 차이 가 Long있습니다. long(원시 값)으로 캐스트하면 자동으로 (포장 Long하는 참조 유형) 상자로 채워 져야합니다 .

또는 new의 인스턴스를 생성 Long하여 int값으로 초기화하는 데 사용할 수도 있습니다 .


31
Earwicker가 말한 것을 설명하기 위해 Long.valueOf (i)를 호출하면 시간이 오래 걸리지 만 int가 넓어지고 Long 객체가 반환됩니다.
Grundlefleck

1
오토 박싱은 Long매번 새로운 객체 를 만들 필요는 없기 때문에 선호 됩니다.
Michael Myers

2
(경고 :이 주석의 나머지 부분은 추측과 추측입니다.) Long.valueOf ()에 제공된 값이 0에서 128 사이에 해당하는 경우가 매우 일반적이며 캐시 된 인스턴스를 반환하면 오토 박싱보다 선호됩니까? (가치가 있다고 생각되면 새로운 질문을 할 수도 있습니다 ...)
Grundlefleck

4
오토 박싱은 그와 같은 일을합니다. 그건 그렇고, 그것은 -127과 128 사이입니다.
Daniel Earwicker

6
@ Grunddlefleck : Autoboxing은 Long.valueOf()(정확하게 기억한다면)를 사용하므로 전혀 차이가 없습니다. 내 의견은 답변이 아닌 답변에 대한 답변이었습니다.
Michael Myers

194

다음을 사용하십시오 Long.valueOf(int);..


5
널 (null) 인 Integer 오브젝트를 수신하는 경우 NullPointerException이 생성되므로주의하십시오.
will824

2
내가 생각하기에 맞다면 나는 대답이 오래된 것이기 때문에 그 방법을 찾을 수 없다고 생각했다Long.valueOf(int) !!
shareef

5
@ will824-기본 'int'변수는 null 일 수 없습니다.
Rondo

1
@shareef - SERG의 코멘트를 참조 -하지만이 방법은 긴과 긴있는 autoboxes에 INT 캐스트 생각 ... 그래서 중복 보인다
론도

1
@ Rondo는 Integer캔이라고 말했습니다.
Moira

17

정수를 정수로 입력 한 경우 다음을 수행 할 수 있습니다.

Integer y = 1;
long x = y.longValue();


6

나는이 작은 장난감을 가지고 있는데, 그것은 또한 일반적인 인터페이스가 아닌 인터페이스를 다룹니다. 피드가 잘못되면 ClassCastException이 발생해도 괜찮습니다 (OK and happy)

public class TypeUtil {
    public static long castToLong(Object o) {
        Number n = (Number) o;
        return n.longValue();
    }
}

6

Java에서는 다음을 수행 할 수 있습니다.

 int myInt=4;
 Long myLong= new Long(myInt);

귀하의 경우에는 다음과 같습니다.

content.setSequence(new Long(i));

6

어떻게

int myInt = 88;

// 컴파일하지 않습니다

Long myLong = myInt;

// int의 NULL이 아닌 정신을 컴파일하고 유지합니다. 최고의 캐스트전혀 캐스트되지 않습니다 . 물론 사용 사례에 Long 및 가능한 NULL 값이 필요할 수 있습니다. 그러나 int 또는 다른 long이 유일한 입력이고 방법을 수정할 수 있다면이 접근법을 제안합니다.

long myLong = myInt;

// 컴파일하는 것이 가장 효율적인 방법이며 소스 값이 NULL이 아니며 절대 NULL이 아님을 분명히합니다.

Long myLong = (long) myInt;

3

우리는 Number참조 를 사용하여 긴 가치를 얻을 것 입니다.

public static long toLong(Number number){
    return number.longValue();
}

모든 숫자 유형에 적용됩니다. 여기 테스트가 있습니다.

public static void testToLong() throws Exception {
    assertEquals(0l, toLong(0));   // an int
    assertEquals(0l, toLong((short)0)); // a short
    assertEquals(0l, toLong(0l)); // a long
    assertEquals(0l, toLong((long) 0)); // another long
    assertEquals(0l, toLong(0.0f));  // a float
    assertEquals(0l, toLong(0.0));  // a double

}


2

나는 이것에 많은 어려움을 겪었다. 나는 단지하고 싶었다 :

thisBill.IntervalCount = jPaidCountSpinner.getValue();

IntervalCount가 Long이고 JSpinner가 Long을 리턴하도록 설정되었습니다. 결국 나는이 기능을 작성해야했습니다.

    public static final Long getLong(Object obj) throws IllegalArgumentException {
    Long rv;

    if((obj.getClass() == Integer.class) || (obj.getClass() == Long.class) || (obj.getClass() == Double.class)) {
        rv = Long.parseLong(obj.toString());
    }
    else if((obj.getClass() == int.class) || (obj.getClass() == long.class) || (obj.getClass() == double.class)) {
        rv = (Long) obj;
    }
    else if(obj.getClass() == String.class) {
        rv = Long.parseLong(obj.toString());
    }
    else {
        throw new IllegalArgumentException("getLong: type " + obj.getClass() + " = \"" + obj.toString() + "\" unaccounted for");
    }

    return rv;
}

트릭을 수행하는 것 같습니다. 간단한 캐스팅은 없었으며 위의 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 매우 실망 스럽습니다.


1
경우 jPaidCountSpinner.getValue()반환 사실 A의 인 개체 Long, 당신은 확실히 만 둘 필요가 (Long)앞에 캐스트. 또한 대한 검사에 중단 점을 넣어 시도 int.class또는 long.class등은 이제까지 그것을 명중 하는가? 그리고 숫자와 비슷한 객체가있는 경우 객체를 지원 java.util.Number하므로 객체로 캐스팅하고 longValue메소드를 호출하십시오 . 이 경우 문자열을 사용할 필요가 없습니다. 따라서이 함수는 문자열을 처리해야하더라도 상당히 단순화 될 수 있습니다. (여기서 문제의 일부는에 대한 잘못된 참조 문서입니다 JSpinner).
Daniel Earwicker

1
나도 이런 식으로 일을했다. 나는 어떤 종류의 숫자를 받을지 확신하지 못했고 효율성에 거의 관심이 없지만 보일러 플레이트를 피하고 싶어 Long으로 변환하려고했습니다.
Profiterole

2
 //Suppose you have int and you wan to convert it to Long
 int i=78;
 //convert to Long
 Long l=Long.valueOf(i)

0

즉시 유일한 방법이있는 한 Long.valueOf(long)에서 주조 int로는 long사용하는 경우 암시 적으로 수행됩니다 Long.valueOf(intValue).

이를 수행하는보다 명확한 방법은

Integer.valueOf(intValue).longValue()

longValue는 단지 (long)이므로 여기서 "얻는"것은 Integer내부 캐시 뿐입니다 .
Martin Schröder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.