2017-09-13 16 views

답변

16

JLS Sec 5.2, "Assignment contexts" (강조 내)에서 :

또한 표현 유형 바이트 짧은 문자의 정수 식 (§15.28) 인 경우, 또는,에서 INT :

  • 변수의 유형이 byte, short 또는 char 인 경우 축소 기본 변환을 사용할 수 있으며 상수 표현식의 값은 변수 유형에서 나타낼 수 있습니다.

    • 바이트 상수 식의 값은 바이트 타입에서 표현할 수있다 : 변수의 유형일 경우
    • 복싱 전환 하였다 좁아 기본 변환

    • 사용할 수있다.

그것은 단순히 스펙에 의해 long 초 동안 허용하지 않는다

  • .... 여기에 두 번째 글 머리 기호 지점이 관계없이 권투의 일이 있다고

    참고 : byte 변수에 일정한 long 식을 할당 마찬가지로 실패 :

    // Both compiler errors. 
    byte primitive = 0L; 
    Byte wrapped = 0L; 
    
  • +0

    내가 왜 배울 궁금합니다. 긴 단어가 기계라는 사실과 관련이있을 수 있습니까? –

    +6

    아마도 'int'가 표현식을 포함한 상수 값의 기본 유형이기 때문에'short s = 123'과 같은 코드가 _lot됩니다. 그런 좁은 변환이 사용되지 않으면 모든 곳에서 캐스트가 필요합니다. . 특히 Java는 유형이 좁은 리터럴 구문이 없습니다. 반면에 식의 타입이 명시 적으로'long'이거나 상수에 L이 사용되었거나 어떤 부분이 상수이기 때문에 그 값을 좁히는 것이 오류 일 수 있으며 이런 상황은 훨씬 덜 일반적입니다 'int' case보다 더 길다. 그리고 나는 균형을 잘못 추측하고있다. – BeeOnRope

    +0

    autoboxing은 이것과 관련이 없다는 점에 유의하십시오. 똑같은 것이 순수한 원시 타입에 적용됩니다. 규칙은 추가되었을 때 박스형에 대한 할당을 포함하도록 확장되었습니다. @JonathanRosenne – BeeOnRope