Java에서 Int에서 Long으로 어떻게 변환합니까?
-
19-09-2019 - |
문제
나는 여기에서 계속해서 문제를 일으키는 사람들과 Google 사람들을 찾습니다. long
에게 int
그리고 다른 방법은 아닙니다. 그러나 나는 내가이 시나리오에 들어간 유일한 사람이 아니라고 확신합니다. 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
그리고 캐스트 Long
. 당신이 캐스팅된다면 long
(원시적 값) 그러면 자동으로 상자에 넣어야합니다. Long
(포장하는 참조 유형).
대안 적으로 사용할 수 있습니다 new
인스턴스를 만듭니다 Long
, 초기화 int
값.
다른 팁
다음을 사용하십시오. Long.valueOf(int);
.
정수로 int를 이미 입력 한 경우 다음을 수행 할 수 있습니다.
Integer y = 1;
long x = y.longValue();
사용
new Long(your_integer);
또는
Long.valueOf(your_integer);
나는이 작은 장난감을 가지고 있으며, 또한 비네릭 인터페이스를 다루는 것도 있습니다. 피드가 잘못되면 ClasscastException을 던지는 것은 괜찮습니다 (Ok and Happy)
public class TypeUtil {
public static long castToLong(Object o) {
Number n = (Number) o;
return n.longValue();
}
}
Java에서는 할 수 있습니다.
int myInt=4;
Long myLong= new Long(myInt);
귀하의 경우에는 다음과 같습니다.
content.setSequence(new Long(i));
우리는 사용하여 긴 가치를 얻을 것입니다 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
}
어때
int myInt = 88;
// 컴파일되지 않습니다
Long myLong = myInt;
// int의 비 널 정신을 컴파일하고 유지합니다. 최고 깁스 ~이다 전혀 캐스트가 없습니다. 물론, 유스 케이스는 길고 가능한 널 값이 필요할 수 있습니다. 그러나 INT 또는 다른 오래가 유일한 입력이고 방법을 수정할 수 있다면이 접근법을 제안합니다.
long myLong = myInt;
// 컴파일하고, 가장 효율적인 방법이며, 소스 값이 널이 아니며 결코 널이 될 수 없음을 분명히합니다.
Long myLong = (long) myInt;
1,new Long(intValue);
2,Long.valueOf(intValue);
나는 이것에 많은 어려움을 겪었다. 나는 단지 :
thisBill.IntervalCount = jPaidCountSpinner.getValue();
IntervalCount가 길고 jspinner가 길게 돌아 오도록 설정되었습니다. 결국 나는이 기능을 작성해야했다.
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;
}
트릭을하는 것 같습니다. 간단한 캐스팅이 없으며 위의 솔루션 중 어느 것도 저에게 효과가 없었습니다. 매우 실망 스럽습니다.
//Suppose you have int and you wan to convert it to Long
int i=78;
//convert to Long
Long l=Long.valueOf(i)
방법 만있는 즉시 Long.valueOf(long)
, 캐스트 int
에게 long
사용시 암시 적으로 수행됩니다 Long.valueOf(intValue)
.
더 명확한 방법은이를 수행하는 것입니다
Integer.valueOf(intValue).longValue()