为什么ZoneOffset.ofTotalSeconds(int totalSeconds)
仅在totalSeconds是四分之一小时的倍数时才将缓存用于ZoneOffset?
if (totalSeconds % (15 * SECONDS_PER_MINUTE) == 0) {
Integer totalSecs = totalSeconds;
ZoneOffset result = SECONDS_CACHE.get(totalSecs);
if (result == null) {
(...)
最佳答案
例如,到目前为止,目前使用的最大区域偏移量是四分之一小时
Europe/Ljubljana +02:00
America/Boa_Vista -04:00
Asia/Brunei +08:00
Pacific/Wake +12:00
Asia/Colombo +05:30
Asia/Kathmandu +05:45
由于经常使用此类,因此值得对其进行缓存。如果在您的程序中使用,则不太可能再次在您的程序或在同一JVM中运行的其他程序中再次使用它们。历史上已经使用过其他偏移量,甚至从未使用过其他偏移量,因此不值得缓存。即使您只使用过一次,他们也认为您再次使用相同的可能性很低,以至于在JVM关闭之前,它们都不希望对其进行缓存(可能从现在开始要花费几周甚至几个月的时间)。
我并没有声称自己是心智的读者,但是我给出的解释对我自己是有道理的,我认为,即使不是100%正确,它也能抓住做出决定背后最重要的思想。事情稍微复杂些。例如,没有使用很多不能被整小时整除的偏移量,而是选择了一种简单的条件。