int 유형의 리터럴 xyz가 범위를 벗어났습니다.
현재 Java에서 데이터 유형으로 작업하고 있으며 올바르게 이해했다면 유형 long
은 -9,223,372,036,854에서 +9,223,372,036,854,775,807 사이의 값을 허용합니다. 이제 아래에서 볼 수 있듯이 testLong
값으로 9223372036854775807을 삽입하면 다음과 같은 오류가 발생하지만 라는 Long 변수를 만들었습니다 .
"int 유형의 리터럴 9223372036854775807이 범위를 벗어났습니다."
long
데이터 유형 을 왜 참조하는지 모르겠습니다 .int
누구나 아이디어가 있습니까?
아래 코드 :
char testChar = 01;
byte testByte = -128;
int testInt = -2147483648;
short testShort = -32768;
long testLong = 9223372036854775807;
float testFoat;
double testDouble = 4.940656458412;
boolean testBool = true;
L
끝에 대문자 추가 :
long value = 9223372036854775807L;
그렇지 않으면 컴파일러는 리터럴을으로 구문 분석하려고 시도 int
하므로 오류 메시지가 표시됩니다.
long 데이터 유형을 int로 참조하는 이유를 모르겠습니다.
그렇지 않습니다. 컴파일러 메시지를 신뢰하는 법을 배워야합니다 (특히 고대 C / C ++ 컴파일러가 아닌 정상적이고 현대적인 컴파일러에서 온 경우). 그들이 말하는 언어는 때때로 해독하기 어려울 수 있지만 일반적으로 거짓말을하지 않습니다.
다시 살펴 보겠습니다.
int 9223372036854775807의 리터럴이 범위를 벗어났습니다.
이 점에 유의 하지 않는 당신의 변수 언급 testLong
되는 타입 long
은, 그래서 어디를 하지 초기화에 대해. 문제는 다른 지점에서 발생하는 것 같습니다.
이제 메시지의 일부를 조사해 보겠습니다.
int
그가 무언가를int
가치 로 취급하고 싶다고 말합니다 (당신이 원하는 것이 아닙니다!)- "범위를 벗어남"은 매우 분명합니다. 무언가가 예상 범위 내에 있지 않습니다 (아마의 범위를 벗어남
int
) - "리터럴": 이제 흥미 롭습니다. 리터럴이란 무엇입니까?
잠시 동안 리터럴에 대해 이야기하기 위해 아늑한 목록을 떠날 것입니다. 리터럴은 코드에서 가치가있는 곳입니다. 있다 String
리터럴, int
리터럴, class
등등 리터럴하고. 코드에서 명시 적으로 값 을 언급 할 때마다 이는 리터럴입니다.
따라서 실제로 변수 선언에 대해 잔소리하는 것이 아니라 숫자 자체, 값이 잔소리하는 것입니다.
a long
와 an int
이 동일하게 허용되는 컨텍스트에서 동일한 리터럴을 사용하여 쉽게 확인할 수 있습니다 .
System.out.println(9223372036854775807);
PrintStream.println
anint
또는 along
(또는 거의 다른 것)를 취할 수 있습니다 . 그럼 그 코드는 괜찮 겠죠?
아뇨, 어쩌면 한다 , 그러나 규칙에 따라 그것 입니다 잘하지.
문제는 "어떤 자리"는로 정의되는 int
문자를 따라서하고 있어야 에 의해 정의 된 범위에 int
.
당신이 쓰고 싶은 경우 long
문자를, 당신은 추가에 의한 명시해야합니다 L
(또는 소문자 l
,하지만 난 매우 그것은을 위해 실수로 열심히 읽어 훨씬 쉽게하고 있기 때문에, 당신은 항상 대문자의 변형을 사용하는 것이 좋습니다 1
).
float
(접미사 F
/ f
) 및 double
(접미사 D
/ d
) 에서도 유사한 문제가 발생합니다 .
Side note: you'll realize that there are no byte
or short
literals and you can still assign values (usually int
literals) to byte
and short
variables: that's possible due to special rules in § 5.2 about Assignment Converson: they allow assignment of constant expressions of a larger type to byte
, short
, char
or int
if the values are within the types range.
Try doing 9223372036854775807L
I had this problem in the past and I fixed that by writing the value in the scientific form. for example:
double val = 9e300;
long ak = 34778754226788444L/l;
Both use but at a time only one use uppercase L or lowercase l.
Why use L/l? Because long is a part of integral datatype.
참고URL : https://stackoverflow.com/questions/7093186/the-literal-xyz-of-type-int-is-out-of-range
'Programing' 카테고리의 다른 글
형제 노드를 선택하는 방법이 있습니까? (0) | 2020.09.17 |
---|---|
PHP에서 파일에 쓰는 방법? (0) | 2020.09.17 |
jQuery-클래스 대신 ID 추가 (0) | 2020.09.17 |
CUDA가 내 gcc 버전과 호환되지 않습니다. (0) | 2020.09.17 |
MAMP는 php.ini를 어디에 보관합니까? (0) | 2020.09.17 |