当前位置: 首页 > 知识库问答 >
问题:

我为什么要用双人。valueOf()而不是新的Double()?[重复]

秋阳旭
2023-03-14

据我所知,例如,整数缓存了值为-128到127的实例。这是JLS的要求。JLS 5.1.7:

如果要装箱的值p是对布尔、字节、字符、短、int或长类型的常量表达式(§15.29)求值的结果,且结果为true、false、包含“\u0000”到“\u007f”范围内的字符,或包含-128到127范围内的整数,则a和b是p的任意两个装箱转换的结果。a==b的情况总是这样。

所以我能理解使用整数的意义。valueOf()或Long。valueOf()而不是使用新运算符创建实例。使用valueOf()返回值为-128到127的固定实例。在本例中,我甚至可以使用==运算符比较两个对象。此外,我可以使用-XX:AutoBoxCacheMax增加缓存的上限范围=

但是我不明白为什么不建议使用新的Float()和新的Douple()?Float和Douple都没有缓存。而value()运算符返回使用新运算符创建的实例。

根据JDK文档,我应该使用静态工厂方法Float。value of()或Double。valueOf()而不是新的Float()或新的Double(),我将拥有“显著更好的空间和时间性能”。但它们在哪里?

/**
 * Constructs a newly allocated {@code Double} object that
 * represents the primitive {@code double} argument.
 *
 * @param   value   the value to be represented by the {@code Double}.
 *
 * @deprecated
 * It is rarely appropriate to use this constructor. The static factory
 * {@link #valueOf(double)} is generally a better choice, as it is
 * likely to yield significantly better space and time performance.
 */
@Deprecated(since="9")
public Double(double value) {
    this.value = value;
}

/**
 * Returns a {@code Double} instance representing the specified
 * {@code double} value.
 * If a new {@code Double} instance is not required, this method
 * should generally be used in preference to the constructor
 * {@link #Double(double)}, as this method is likely to yield
 * significantly better space and time performance by caching
 * frequently requested values.
 *
 * @param  d a double value.
 * @return a {@code Double} instance representing {@code d}.
 * @since  1.5
 */
@HotSpotIntrinsicCandidate
public static Double valueOf(double d) {
    return new Double(d);
}

共有1个答案

督坚白
2023-03-14

他们假设有一天他们可能会添加一个缓存,在这种情况下,建议是正确的。但它从未发生过,也可能永远不会发生,所以这没什么区别。

 类似资料:
  • 这是代码: 以下是输出: 为什么我们不更改valueOf(double)方法或BigDecimal类的BigDecimal(double)构造函数,以获得一致的结果?

  • 问题内容: 我不知道您是否认为这是一个重要问题,但我想知道。float是一个浮点数(4个字节)。double是浮点数(8个字节)。为什么我们定义双重假名铸造: 但是我们需要使用浮点数进行转换: 要么 先感谢您。 问题答案: 如果浮点文字以字母或结束,则其类型为float 。否则,其类型为,并且可以选择以字母或结尾。 浮点类型(和)也可以使用E或e(对于科学记数法),或(32位浮点文字)和或(64位

  • 问题内容: 我不确定为什么列出项目时为什么需要使用ul-li而不是简单地使用div。我可以使两者看起来完全一样,因此与创建div相比,创建无序列表的功能优势在哪里? 问题答案: 为了语义正确。HTML具有表达事物列表的功能,它可以帮助Google机器人,屏幕阅读器以及所有不仅仅关心网站外观的用户更好地了解您的内容。

  • 我有什么理由使用 而不是 输出应该是相同的,我所做的基准测试似乎表明稍微快一点(需要评估所有非标准评估输入)。 那么,对于如此简单的情况,有什么理由让我考虑切换到< code>purrr::map呢?我在这里不是问你喜欢或不喜欢purrr提供的语法和其他功能。,但严格来说是关于< code>purrr::map与< code>lapply的比较,假设使用标准评估,即< code>map(

  • 问题内容: 目前使用jQuery,当我需要在发生点击时做一些事情时,我会像这样… 我正在看别人在项目上有的代码,他们这样做是… 请注意,就我所知,它似乎在做相同的事情,除了它们使用的是live()函数(现在已弃用并且jQuery文档说要使用live()函数),但是无论哪种方式,为什么要使用live / on()而不是我的第一个示例? 问题答案: 因为您可能具有动态生成的元素(例如,来自AJAX调用

  • 问题内容: 在selenium.webdriver.common.by中使用By代替常规的find_element_by _…方法的目的和好处是什么?例如: vs: 问题答案: 据documentatio ñ 似乎是一种“ 私人 所使用的”法的方法和还可以使用页面对象 因此,使用Page Object模式是您可能需要+ 而不是的原因。 例如,您有一些包含元素值的变量 然后用它来定位元素为 如果由于