int 유형의 리터럴 xyz가 범위를 벗어났습니다.
현재 자바에서 데이터 타입을 사용하고 있으며, 그 타입을 올바르게 이해하고 있다면long
는 -9,223,372,036,854,775,808 ~+9,223,372,036,854,775,807 범위의 값을 받아들입니다.아래 보시는 바와 같이, 제가 만든 것은long
호출된 변수testLong
9223372036854775807을 값으로 삽입하면 다음과 같은 오류가 나타납니다.
타입 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
이 때문에 에러 메시지가 표시됩니다.
왜 긴 데이터 유형을 int라고 하는지 모르겠습니다.
그것은 아니다.컴파일러 메시지를 신뢰하는 법을 배워야 합니다(특히 오래된 컴파일러가 아닌 정상적인 최신 컴파일러의 메시지일 경우).그들이 말하는 언어는 때때로 해독하기 어려울 수 있지만, 그들은 보통 당신에게 거짓말을 하지 않습니다.
다시 한 번 살펴보겠습니다.
int 9223372036854775807 리터럴이 범위를 벗어났습니다.
주의: 당신의 변수는 언급되어 있지 않습니다.testLong
또는 종류long
문제는 초기화가 아닙니다.뭔가 다른 곳에서 일어나는 것 같아요.
이제 메시지의 일부에 대해 알아보겠습니다.
int
우리에게 그가 무언가를 치료하고 싶어한다는 것을 말해준다.int
가치(원하는 바가 아닙니다)- 「범위외」는 꽤 명확합니다.뭔가가 예상 범위내에 있지 않습니다(예상 범위외).
int
) - "더 리터럴" : 흥미롭네요. 리터럴이란 무엇인가?
잠시 리터럴에 대해 이야기하기 위해 간단한 목록을 남겨두겠습니다. 리터럴은 코드 내에서 가치가 있는 분야입니다.있다String
리터럴int
리터럴class
리터럴 등.코드에 명시적으로 값을 언급할 때마다 문자 그대로입니다.
변수 선언이 아니라 수치 그 자체입니다.가치가 괴롭히는 거죠
이것은, 같은 리터럴을 사용하는 것으로 간단하게 확인할 수 있습니다.long
그리고int
동등하게 허용됩니다.
System.out.println(9223372036854775807);
PrintStream.println
또는 (또는 다른 거의 모든 것을) 취할 수 있습니다.그럼 그 암호는 괜찮겠죠?
아니, 그래야 할 것 같은데, 규칙에 따르면 괜찮지 않아
문제는 '일부 숫자'가 리터럴로 정의되어 있기 때문에 다음에서 정의되는 범위 내에 있어야 한다는 것입니다.int
.
'를 쓰고 long
그대로를 돼요.L
소문자)l
대문자 배리언트를 사용하는 것이 좋습니다.왜냐하면, 이 배리언트는 읽기 쉽고, 다른 배리언트와 혼동하기 어렵기 때문입니다.1
를 참조해 주세요.
「」에서도해 주세요.float
(postfix)F
/f
및 )의 개요double
(postfix)D
/d
를 참조해 주세요.
주의사항: 고객님은 고객님의 요구에 부응할 수 없다는 것을 알게 되실 겁니다.byte
★★★★★★★★★★★★★★★★★」short
을 할당할 수 은 값을할 수 있습니다).int
byte
★★★★★★★★★★★★★★★★★」short
변수: 할당 콘텍스트에서의 변환에 관한 § 5.2의 특별한 규칙에 의해 가능합니다.이러한 규칙에 의해, 보다 큰 타입의 상수 표현을 할당할 수 있습니다.byte
,short
,char
★★★★★★★★★★★★★★★★★」int
값이 유형 범위 내에 있는 경우.
번 .9223372036854775807L
. 。L
마지막으로 자바에게 말한다.9223372036854775807
는 입니다.long
.
나는 과거에 이런 문제가 있었고 그 값을 과학적 형태로 써서 고쳤다.예를 들어 다음과 같습니다.
double val = 9e300;
long ak = 34778754226788444L/l;
둘 다 사용하지만 대문자 L 또는 소문자 L을 사용하는 것은 한 번에 1개뿐입니다.
L/L을 사용하는 이유long은 적분 데이터 유형의 일부이기 때문입니다.
언급URL : https://stackoverflow.com/questions/7093186/the-literal-xyz-of-type-int-is-out-of-range
'programing' 카테고리의 다른 글
Mac OS 10.6(Snow Leopard), 10.7(Lion), 10.8(Mountain Lion)에서 PHP와 MySQL을 활성화하는 가장 쉬운 방법은 무엇입니까? (0) | 2023.01.01 |
---|---|
C 프로그램이 MySQL 프로시저에서 결과 값을 가져올 수 없습니다. (0) | 2023.01.01 |
PHP에서 datetime을 ISO 8601로 변환하는 방법 (0) | 2022.12.27 |
MariaDb에 연결할 때 MySql Workbench 오류가 발생했습니다.performance_schema.user_variables_by_thread' 테이블이 존재하지 않습니다. (0) | 2022.12.27 |
한 배열의 요소가 PHP의 다른 배열에 있는지 확인하는 중 (0) | 2022.12.27 |