나는 변환 자바 프로그램이 String
로를 int
하지만, 문자열의 울렸다는 190520141618013381
(의 울렸다 위에 int
내가이 변환 할 때) 발생합니다int
java.lang.NumberFormatException:
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(format.format(date));
stringBuffer.append(demandCount);
int test_int = Integer.parseInt(stringBuffer.toString()); // exception has been fixed by putting
//long abc_i = Long.parseLong(abc);
log.info("test_int: "+test_int);
내 질문은 컴파일러가 대신 throw해야한다는 것입니다 NumberOutOfRangException
(이 예외가 API에서 사용 가능한 경우) java.lang.NumberFormatException:
, number ( 190520141618013381
) 형식 이 맞습니다.
문자열 190520141618013381
이의 범위를 벗어 int
났지만 int
너무 길기 때문에 의 허용 된 형식과 일치하지 않습니다 .
컴파일러는이 오류를 발생시키지 않고 런타임에 발생합니다.
이 방법에 대한 문서를 준수하는 것이 옳다고 생각합니다.
BTW StringBuffer를 사용하지 마십시오. 10 년 전에 StringBuilder로 대체되었습니다.
IMHO는 날짜를 정수로 저장하는 것은 일반적으로 좋은 생각이 아닙니다.
시간 (밀리 초)을 포함하는 고유 ID를 얻는 더 효율적인 방법은 이와 같은 작업을 수행하는 것입니다.
private static final AtomicLong TS_COUNTER = new AtomicLong();
public static long nextTimeStamp() {
long time = System.currentTimeMillis() * 1000;
long curr = TS_COUNTER.get();
if (curr < time && TS_COUNTER.compareAndSet(curr, time))
return time;
return TS_COUNTER.incrementAndGet();
}
여기에는 time-in-millis * 1000과 고유 ID가 있습니다. 평균적으로 초당 1 백만 개 미만의 ID가 있으면 제대로 작동합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다