Long vs Integer, long vs int, 무엇을 언제 사용해야합니까?


답변:


191

Long는 IS Object형태 longInteger의 물체 형태이다 int.

long사용 64 비트 . int사용하는 32 비트 등은 ± 2 억 번호를 저장할 수있는 (-2 31 +2 행 31 -1).

당신은 사용해야 long하고 int당신이에서 상속 방법을 이용해야하는 경우를 제외하고, Object등을, hashcode. Java.util.collections메소드는 일반적으로 boxed ( Object-wrapped) 버전을 사용합니다 . 왜냐하면 any Object에 대해 작동해야하고 intor 와 같은 기본 유형 longObject입니다.

또 다른 차이점이다 long하고 int있는 패스별로 값 반면 Long하고 Integer있는 패스 별 기준 값 이외의 모든 원시 자바 타입처럼. 따라서 또는를 수정할 수있는 Long경우 Integer(JNI 코드를 사용하지 않고 변경할 수없는 경우) 다른 것을 사용하는 또 다른 이유가 있습니다.

마지막으로 차이가 있다는 것입니다 Long또는이 Integer될 수있다 null.


5
@ Borealid, 이것은 너무 잘못되었습니다. Java는 항상 값으로 전달됩니다 .Java에서 참조로 전달하는 것과 같은 것은 없습니다.
Diego Ramos

9
어 허? 자, 자바가 절대 참조를 전달하지 않는다는 아이디어를 살펴 보자. int [2]를 제공하는 함수를 호출 한 다음 함수 내에서 해당 배열의 첫 번째 요소에 보유 된 값을 변경하면 함수의 호출자에게 해당 변경 사항이 표시됩니까? 예? 함수에 전달 된 것은 배열의 값이 아니라 해당 값에 대한 참조이기 때문입니다. "값별 패스"는 실제 데이터 자체가 간접적으로 복사되고 있음을 의미합니다. Java가 가치를 지니고 있다고 가르친 사람은 당신을 혼란스럽게 만들었습니다.
Borealid

3
@Borealid가 잘못되었습니다. 배열에 대한 새로운 참조 사본이 생성 되었기 때문에 값이 변경되었습니다. 따라서 함수를 호출하는 사람이 변경 사항을 볼 수있는 이유는 여전히 값을 전달하는 것입니다. Java에서 참조로 전달이 있다고 말할 수는 없습니다. 원래 참조를 함수에 전달하지 마십시오.
Diego Ramos

6
Java가 실제로하는 것과 완전히 다르게 행동하고 객체 또는 배열을 함수에 전달하는 이론적 세계에서 함수의 수정 사항이 호출자에게 전혀 반영되지 않은 완전히 별도의 사본이 생겼습니다. 언어를 설명 하시겠습니까? 우리가 이야기하는 것이 실제로 Java 가하는 것은 아닙니다.
Borealid

2
@DiegoRamos가 옳습니다. : 자바는 항상 비 프리미티브 메모리 참조입니다 값이 정적 스와핑 여기에 자바 작품, 더 자세한 내용을하지 않기 때문에 혼란이 생성, 값에 의해 전달되는 journaldev.com/3884/...
Panthro

28

기본 유형으로 수행 할 수없는 몇 가지 작업이 있습니다.

  • null값을
  • 그들에 동기화
  • 그것들을 제네릭 클래스의 타입 매개 변수로 사용하십시오.
  • Objects 와 호환되는 API로 전달하십시오.

이들 중 하나가 필요하지 않으면 메모리가 덜 필요하므로 기본 유형을 선호해야합니다.


24
  • int숫자를 보유 할 때는 기본적으로을 사용하십시오 .
  • 범위 int가 너무 작은 경우long
  • 범위 long가 너무 작은 경우BigInteger
  • 숫자를 객체로 처리 해야하는 경우 (예 : Collection, handling null, ...에 넣을 때 ) Integer/ Long대신

13

An int은 32 비트 정수입니다. a long는 64 비트 정수입니다. 어느 것을 사용할지는 숫자가 얼마나 큰지에 따라 다릅니다.

intlong기본 유형은, 동안 IntegerLong개체입니다. 기본 유형은 더 효율적이지만 때로는 객체를 사용해야합니다. 당신은 정수의 목록을 필요로하는 경우 예를 들어, 자바의 컬렉션 클래스 개체 수있는 유일한 작품은, 그래서 당신은 그것을해야합니다 List<Integer>(예를 들어, 당신이 사용할 수 없습니다, intA의 List직접).


6

정수 는 부호있는 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 비트 변수보다 메모리가 두 배가됩니다.


1

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))


0

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 .. 엉망! :-/

이것은 Long과 long의 차이에 관한 질문에 대답하지 않습니다.
GreenAsJade

아니요, 위의 질문에 특정 언어가 명시되어 있지 않기 때문에 기본 유형과 데이터 유형 객체, 실제로 @GreenAsJade의 차이점을 명시 적으로 말하지 않고 명시 적으로 대답하지 않습니다. 그래서 나는 비교를 제공하여 모두가 차이점을 확인할 수 있습니다. (제공된 하드 데이터에서)
Franta

질문은 자바를 언급했다.
GreenAsJade
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.