문제

Java로 숫자를 입력하면 컴파일러가 자동으로 정수로 읽으므로 (Long)를 입력 할 때 6000000000 (정수의 범위가 아님) 6000000000 정수가 아닙니다. 이를 수정하려면 지정해야했습니다 6000000000L. 방금이 사양에 대해 배웠습니다.

Short, Byte, Float, Double에 대한 다른 숫자 사양이 있습니까? 타이핑하는 숫자를 지정할 수 있다면 Java가 캐스트 할 필요가 없을 것이기 때문에 (나는 가정) 이것들이 좋을 것 같습니다. . 나는 일반적 으로이 질문을 직접 검색 할 것이지만, 이런 종류의 숫자 사양이 무엇인지 모르겠습니다.

도움이 되었습니까?

해결책

특정 접미사가 있습니다 long (예 : 39832L), float (예 : 2.4f) 그리고 double (예 : -7.832d).

접미사가없고 통합 유형 인 경우 (예 : 5623), 그것은 an이라고 가정합니다 int. 통합 유형이 아닌 경우 (예 : 3.14159), 그것은 a double.

다른 모든 경우 (byte, short, char), 특정 접미사가 없으므로 캐스트가 필요합니다.

Java Spec는 상류 및 소문자 접미사를 모두 허용하지만 대문자 버전은 longS는 대문자로 선호됩니다 L 숫자와 혼동하기 쉽습니다 1 소문자보다 l.

참조 JLS 섹션 3.10 gory 세부 사항은 (정의 참조 IntegerTypeSuffix).

다른 팁

나는 당신이 약간의 접선을 신경 쓰지 않기를 바랍니다. 그러나 당신은 F (플로트), D (이중), 그리고 L (오래), 제안이 이루어졌습니다 접미사를 추가합니다 byte 그리고 shortY 그리고 S 각기. 이렇게하면 바이트 (또는 짧은) 배열에 문자 구문을 사용할 때 바이트로 캐스트 할 필요가 없습니다. 제안서에서 예제 인용 :

주요 이점 : 제안서가 채택되면 플랫폼이 더 나은 이유는 무엇입니까?

Cruddy 코드와 같은

 byte[] stuff = { 0x00, 0x7F, (byte)0x80,  (byte)0xFF};

다시 요약 할 수 있습니다

 byte[] ufum7 = { 0x00y, 0x7Fy, 0x80y, 0xFFy };

Joe Darcy는 Java 7의 프로젝트 코인을 감독하고 있으며 그의 블로그 이러한 제안을 추적하는 쉬운 방법이었습니다.

이들은 리터럴이며 설명되어 있습니다 섹션 3.10 자바 언어 사양의.

기본적으로 모든 통합 원시 데이터 유형 (바이트, 짧은, int, long)은 다음과 같이 처리됩니다. int Java 컴파일러에 의해 입력하십시오. 을 위한 바이트 그리고 짧은, 그들에게 할당 된 가치가 그들의 범위에있는 한, 문제가없고 접미사가 필요하지 않습니다. 값이 할당 된 경우 바이트 그리고 짧은 범위를 초과하고 명시적인 유형 캐스팅이 필요합니다.

전:

byte b = 130; // CE: range is exceeding.

이 공연 유형 캐스팅을 극복합니다.

byte b = (byte)130; //valid, but chances of losing data is there.

데이터 유형이 긴 경우 번거 로움없이 정수 값을 허용 할 수 있습니다. 우리가 좋아하는 것을 할당한다고 가정 해 봅시다

Long l = 2147483647; //which is max value of int

이 경우 L/L과 같은 접미사가 필요하지 않습니다. 기본적으로 값 2147483647은 Java 컴파일러가 int 유형으로 간주됩니다. 내부 유형 캐스팅은 컴파일러에 의해 수행되며 Int는 자동으로 장기 유형으로 홍보됩니다.

Long l = 2147483648; //CE: value is treated as int but out of range 

여기서 우리는 licer 2147483648을 Java 컴파일러에 의해 긴 유형으로 취급하려면 접미사를 l로 넣어야합니다.

마침내

Long l = 2147483648L;// works fine.

타이핑하는 숫자를 지정할 수 있다면 Java가 캐스트 할 필요가 없기 때문에 이것들이 좋을 것 같습니다.

리터럴의 구문 분석은 컴파일 시간에 발생하기 때문에 이는 성능과 관련하여 절대적으로 관련이 없습니다. 유일한 이유 short 그리고 byte 접미사는 좋을 것입니다. 더 컴팩트 한 코드로 이어진다는 것입니다.

고려하다:

long l = -1 >>> 1;

~ 대

int a = -1;
long l = a >>> 1;

이제 귀찮은 코드 조각이 변수에 동일한 값을 제공 할 것으로 예상됩니다. l. 그래서 우리는 표현이 필요합니다 int 리터럴 int에스.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top