Java 创建日历实例特别昂贵

Java 创建日历实例特别昂贵,java,Java,用有效的Java语言 这里,Joshua Bloch说,创建日历实例的成本特别高。但没有提到任何理由 我的问题是为什么它比创建其他类的实例更昂贵?您实际上在评论中回答了您的问题。除非你想处理所有复杂的日历,计算假期、星期日、时区等,否则简单的long将满足你的需要。Calendar需要大量内存(而不是长8字节),因为它必须提供所有这些转换、转换、比较、宽容、字段操作和其他基于区域设置的功能。它有很多字段以纪元、周中的日、周中的日等为起始。所有这些字段都用于某些动作,因此类的性能比简单的长比较差得

用有效的Java语言

这里,Joshua Bloch说,创建日历实例的成本特别高。但没有提到任何理由


我的问题是为什么它比创建其他类的实例更昂贵?

您实际上在评论中回答了您的问题。除非你想处理所有复杂的日历,计算假期、星期日、时区等,否则简单的long将满足你的需要。Calendar需要大量内存(而不是长8字节),因为它必须提供所有这些转换、转换、比较、宽容、字段操作和其他基于区域设置的功能。它有很多字段以纪元、周中的日、周中的日等为起始。所有这些字段都用于某些动作,因此类的性能比简单的长比较差得多


当然,你不能与其他班级相比。每门课程都有自己的需求,可能比日历更复杂、更昂贵。

有一个网站上的问题正是来自同一本书——该网站详细解释了为什么它昂贵:我的建议是查看源代码。Calendar.getInstance()上发生了很多事情,这些事情非常复杂。如果可能的话,使用long更有效。@Necreaux
如果可能的话,使用long更有效这到底意味着什么Calendar对象主要用于日期算术、输出等。如果您希望它用于比较、计时等。System.currentTimeMillis()可以用于获取长时间。long始终可以在以后加载到日历对象中,也可以从中提取。@Necreaux我目前不关心它的用法,我想知道它昂贵的原因,因为在中也没有明确提到它