【问题标题】:AtomicInteger's get() vs intValue()AtomicInteger 的 get() 与 intValue()
【发布时间】:2013-08-24 06:49:18
【问题描述】:

为什么 AtomicInteger 既有 int get() 又有 int intValue()?我看到它还有来自 Number 的 float floatValue() 等。是否具有与保持 AtomicInteger 参数的原子性相关的含义,或者两者都可以互换?

【问题讨论】:

    标签: java atomic


    【解决方案1】:

    它们应该可以互换。以下是AtomicInteger源代码的相关部分:

    public int intValue() {
        return get();
    }
    

    【讨论】:

    • 这不是真的。得到是最终的。 intValue 不是最终的。
    【解决方案2】:

    intValue 定义:

    /**
     * Returns the value of this {@code AtomicInteger} as an {@code int}.
     */
    public int intValue() {
        return get();
    }
    

    get 定义:

    /**
     * Gets the current value.
     *
     * @return the current value
     */
    public final int get() {
        return value;
    }
    

    您可以清楚地看到get 方法是finalfinal 方法不能被覆盖。

    如果我们扩展 AtomicInteger 类,我们不能重写 get 方法,但我们可以重写 intValue 方法。

    【讨论】:

    • 这个答案解释了这两种方法之间的区别。但是,为什么AtomicInteger 需要它们仍然无法解释。
    【解决方案3】:

    来自Number class documentation

    抽象类 Number 是 BigDecimal、BigInteger、Byte、Double、Float、Integer、Long 和 Short 类的超类。

    来自AtomicInteger documentation

    从班级复制的描述:
    Number 以 int 形式返回指定数字的值。这可能涉及舍入或截断。

    由于AtomicInteger 扩展了抽象类Number,所以必须实现抽象方法intValue()。在这种情况下它们是相等的。对于其他类型(例如BigDecimalDoubleFloat),它更有意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      相关资源
      最近更新 更多