새 변수를 비교하거나 초기화 할 때 사용하는 변수 중 하나에 차이가 있습니까?BigDecimal ("0")과 BigDecimal.ZERO 사이에 차이점이 있습니까?
저는 BigDecimal.ZERO가 1.5 기능이라는 것을 알고 있습니다.하지만 걱정거리는 있지만, 1.5를 사용한다고 가정하면 문제가되지는 않습니까?
감사합니다.
새 변수를 비교하거나 초기화 할 때 사용하는 변수 중 하나에 차이가 있습니까?BigDecimal ("0")과 BigDecimal.ZERO 사이에 차이점이 있습니까?
저는 BigDecimal.ZERO가 1.5 기능이라는 것을 알고 있습니다.하지만 걱정거리는 있지만, 1.5를 사용한다고 가정하면 문제가되지는 않습니까?
감사합니다.
BigDecimal.ZERO
은 미리 정의 된 상수이므로 런타임시 문자열에서 평가할 필요가 없습니다 (BigDecimal("0")
). 더 빨라지고 새로운 객체를 만들 필요가 없습니다.
코드가 1.5 이전 버전에서 실행되어야하는 경우, (많은 점수를 매긴) 싱글 톤 패턴을 사용하여 BigDecimal.ZERO
과 같은 객체를 만들 수 있습니다. 처음 사용될 때 BigDecimal("0")
을 호출하여 0 개체를 만들고 이후 호출시 해당 개체를 반환합니다. 그렇지 않으면 코드가 1.5 시스템에서 실행되는 경우, 싱글 톤 객체는 런타임 페널티없이 BigDecimal.ZERO
을 반환 할 수 있습니다.
ZERO를 사용하면 새 개체가 생성되거나 구문 분석이 필요하지 않습니다. 확실히가는 길.
호기심에서 벗어났습니다. BigDecimal 용 생성자를 검사했으며 "0"문자열에 대한 최적화가 없습니다. 확실히 그렇습니다. 차이점이 있습니다.
어쨌든 new BigDecimal ("0")을 호출 할 때마다 새로운 객체가 생성되므로 차이가 있습니다. –
주장 할 수 없습니다. 나는 단지 ZERO를 사용하지 않는 것이 얼마나 큰 벌칙인지를 알고 싶어했다. BigDecimal의 생성자가 꽤 무거워서 상당한 양입니다. –
런타임 처벌에 대해 이야기하기 전에이 코드가 중요한지 확인하십시오. 프로파일 링을 설정하고 완전한 유스 케이스를 측정하십시오.
그럼에도 불구하고 컴파일시에 확인하면 Bigdecimal.ZERO
을 선호하지만 실수로 컴파일러에서 허용하는 new BigDecimal("9")
을 입력 할 수 있지만 응용 프로그램에 버그가 발생할 수 있습니다.
숫자에 관계없이 이것을 말할 수 있습니다. –
@RobertL : 그렇습니다. 그러나 이것은 숫자 중 하나에 대해이를 제거하여 상기 위험을 1/10로 줄입니다. :) 'NumberFormatException'을 던질 기회도 없습니다. – wchargin
나는 "본질적으로"라는 단어를 제거 할 것입니다. 이것은 미리 정의 된 상수입니다. –
전화를 잘 주셔서 감사합니다. –
new BigDecimal ("0")은 매번 새로운 객체 인스턴스를 생성하지만 BigDecimal.ZERO는 새 인스턴스를 생성하지 않습니다. –