10

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

4

3 回答 3

9

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

public int intValue() {
    return get();
}
于 2013-08-21T18:41:55.700 回答
6

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方法是final. final方法不能被覆盖。

如果我们扩展 AtomicInteger 类,我们不能覆盖该get方法,但我们可以覆盖该intValue方法。

于 2016-08-29T09:34:23.863 回答
2

Number类文档

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

来自AtomicInteger 文档

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

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

于 2013-08-21T18:48:35.750 回答