때로는 API가 long
or 또는 Long
or int
또는 Integer
을 사용하고 있는데 어떻게 결정했는지 알 수 없습니까?
언제 무엇을 선택해야합니까?
답변
Long
는 IS Object
형태 long
와 Integer
의 물체 형태이다 int
.
은 long
사용 64 비트 . int
사용하는 32 비트 등은 ± 2 억 번호를 저장할 수있는 (-2 31 +2 행 31 -1).
당신은 사용해야 long
하고 int
당신이에서 상속 방법을 이용해야하는 경우를 제외하고, Object
등을, hashcode
. Java.util.collections
메소드는 일반적으로 boxed ( Object
-wrapped) 버전을 사용합니다 . 왜냐하면 any Object
에 대해 작동해야하고 int
or 와 같은 기본 유형 long
은 Object
입니다.
또 다른 차이점이다 long
하고 int
있는 패스별로 값 반면 Long
하고 Integer
있는 패스 별 기준 값 이외의 모든 원시 자바 타입처럼. 따라서 또는를 수정할 수있는 Long
경우 Integer
(JNI 코드를 사용하지 않고 변경할 수없는 경우) 다른 것을 사용하는 또 다른 이유가 있습니다.
마지막으로 차이가 있다는 것입니다 Long
또는이 Integer
될 수있다 null
.
답변
기본 유형으로 수행 할 수없는 몇 가지 작업이 있습니다.
- 이
null
값을 - 그들에 동기화
- 그것들을 제네릭 클래스의 타입 매개 변수로 사용하십시오.
Object
s 와 호환되는 API로 전달하십시오.
이들 중 하나가 필요하지 않으면 메모리가 덜 필요하므로 기본 유형을 선호해야합니다.
답변
int
숫자를 보유 할 때는 기본적으로을 사용하십시오 .- 범위
int
가 너무 작은 경우long
- 범위
long
가 너무 작은 경우BigInteger
- 숫자를 객체로 처리 해야하는 경우 (예 :
Collection
, handlingnull
, …에 넣을 때 )Integer
/Long
대신
답변
An int
은 32 비트 정수입니다. a long
는 64 비트 정수입니다. 어느 것을 사용할지는 숫자가 얼마나 큰지에 따라 다릅니다.
int
및 long
기본 유형은, 동안 Integer
과 Long
개체입니다. 기본 유형은 더 효율적이지만 때로는 객체를 사용해야합니다. 당신은 정수의 목록을 필요로하는 경우 예를 들어, 자바의 컬렉션 클래스 개체 수있는 유일한 작품은, 그래서 당신은 그것을해야합니다 List<Integer>
(예를 들어, 당신이 사용할 수 없습니다, int
A의 List
직접).
답변
정수 는 부호있는 32 비트 정수 유형입니다.
- 로 표시
Int
- 크기 =
32 bits (4byte)
- 범위의 정수를 보유 할 수 있습니다
-2,147,483,648 to 2,147,483,647
- 기본값은 0입니다
Long 은 부호있는 64 비트 정수 유형입니다.
- 로 표시
Long
- 크기 =
64 bits (8byte)
- 범위의 정수를 보유 할 수 있습니다
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
- 기본값은 0L입니다
변수 사용이 32 비트 범위 Int
에 있으면를 사용하고 그렇지 않으면를 사용하십시오 long
. 일반적으로 long은 과학적 계산에 사용되며 그와 같은 정확도가 필요합니다. (예 : pi의 가치).
다른 하나를 선택하는 예는 YouTube의 경우입니다. 그들은 처음에 비디오 조회 카운터를
int
인기 동영상으로 수신 된 조회수가 2,147,483,647 회 이상일 때 오버플 로 된 것으로 정의했습니다 . 때문에Int
카운터가 그 범위보다 더 이상의 임의의 값을 저장할 수없고, 무비는 9,223,372,036,854,775,807 뷰 카운트 이제 64 비트 변수 카운터를 바꾸고. 데이터를 이해하고 64 비트 변수에 맞는 유형을 선택하면 32 비트 변수보다 메모리가 두 배가됩니다.
답변
32 비트를 초과하여 표시 할 수있는 매우 긴 숫자를 사용하는 경우 이상한 동작이 없도록 long을 사용할 수 있습니다.
Java 5에서 in-boxing 및 out-boxing 기능을 사용하여 int 및 Integer를 완전히 동일하게 사용할 수 있습니다. 그것은 당신이 할 수 있음을 의미합니다 :
int myInt = new Integer(11);
Integer myInt2 = myInt;
와 복싱 밖으로는 (에 대한 같은 당신이 추가 변환없이 INT와 정수 사이를 전환 할 수 있도록 Long
, Double
, Short
너무)
당신은 사용할 수 있습니다 int
모든 시간을,하지만 Integer
당신은 정수와 일부 복잡한 작업을 수행하는 데 도움이되는 몇 가지 헬퍼 메소드를 포함 (예 Integer.parseInt(String)
)
답변
a) 객체 클래스 “Long”대 기본 유형 “long” (적어도 Java에서는)
b) 프리미티브 유형의 메모리 크기가 다르거 나 불분명합니다.
자바-모두 명확 : https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
- 바이트, 문자 .. 1B .. 8b
- 짧은 정수 .. 2B .. 16b
- int .. .. .. 4B .. 32b
- long int .. 8B .. 64b
C .. 그냥 엉망 : https://en.wikipedia.org/wiki/C_data_types
- 짧은 .. .. 16b
- int .. .. .. 16b … wtf?!?!
- 긴 .. .. 32b
- 길고 .. 64b .. 엉망! :-/