java - 为什么 Double.valueof javadoc 说它缓存值,而实际上没有?

标签 java javadoc

在OpenJDK中,对于方法:

public static Double valueOf(double d)

javadoc 说:

Returns a Double instance representing the specified double value. If a new Double instance is not required, this method should generally be used in preference to the constructor Double(double), as this method is likely to yield significantly better space and time performance by caching frequently requested values.

这是实际代码:

public static Double valueOf(double d) {
    return new Double(d);
}

缓存是个谎言!这是怎么回事?

最佳答案

该方法适用于多种类型:IntegerLongBigDecimal 等,文档始终相同:在某些情况下(没有定义),方法可以返回相同的结果。

AFAIK,缓存仅针对整数类型实现,它返回 -128 和 127 之间的值(最常见的值)的缓存实例。对于 BigDecimal,缓存当前适用于 0 到 10 的值。

Java 的更高版本可能将此行为扩展到其他值/更多类型。因此,今天使用此代码是明智的,因为它可能使您的代码明天更快(并且今天的代码不会变慢)。

例如,Java 编译器在为自动装箱生成代码时使用此 API。

关于java - 为什么 Double.valueof javadoc 说它缓存值,而实际上没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8561710/

相关文章:

java - Weblogic 12c 中 Web 应用程序关闭/启动后无法解析数据源 JNDI

java - 如何从源文件中提取JavaDoc注释

java - 退出代码 : 1 - javadoc: error - The code being documented uses modules but . ..... 在未命名的模块中

java - RXJava2。我是否需要处理一次发出的流? (单例,也许)

java - 编译错误: Package [CarFeatures] does not exists

java - 无法获取 JdbcConnectionException : The BUFFERDIR connection property is invalid

java - 如何使用 Spring MVC 和 Spring JdbcTemplate RowCallbackHandler 和流结果?

android - 创建 Javadoc 时出错,无法启动 Javadoc 命令

java - TCP 套接字上的 Ascii

android - 如何将 javadoc 或源附加到 libs 文件夹中的 jar?