2011-12-05 5 views
4

당신은자바 LONG 정수 타입

Long myUserId = 1L;Long 변수를 정의해야합니다?

어째서 Long myUserId = 1;을 할 수 없습니까?

+4

그럼 처음 질문에 스스로 대답했습니다. – DMan

+0

"1"(또는 "int"valued compile time expression)을 할당 할 수 있다고 생각 하겠지만 컴파일러는 할당을 수행하기 위해 캐스트를 수행합니다. –

+0

@IraBaxter : 확장 된 캐스트 (int에서 long까지)를 수행 할 것이지만, 그 후에는 오토 박싱을하지 않을 것입니다. – Thilo

답변

7
Long myUserId = 1; // error 

1은 int이기 때문에 작동하지 않습니다.

그것은에 자동 박스를 얻을 것이다 :

Integer myUserId = 1; // ok 

또한으로 확대 얻을 것이다 :

long myUserId = 1;  // also ok 

있지만 둘

합니다.

그래서, 그래, 당신은 Long로 오토 박싱 얻을 수있는 long

Long myUserId = 1L; 

을 말해야한다.

왜 그런 식으로 작동하는지 (또는이 경우에는 작동하지 않음) : 자동 권투가 나중에 (Java5에서) 추가되어 절대적으로 하위 호환이 가능해야 할 가능성이 큽니다. 그것은 그들이 그것을 어떻게 만들 수 있는지 "부드럽게"제한했습니다.

1

그렇지 않으면 Java는 모든 숫자 유형을 정수로 기본값으로 설정합니다.

유일한 이유 "1L는"심지어 (대신 원시 long의)는 Long에 할당 할 수있는 "1L"없이 자바 5

소개 된 "자동 복싱"로 인한 허용, "L"이 없으면 다음과 같이 보입니다.

Long myUserId = Integer.valueOf(1); 

... 분명히 그 자체를 설명하기를 바랍니다. :-)