AtomicInteger的get()vs intValue()

时间:2013-08-21 18:40:16

标签: java atomicity

为什么AtomicInteger同时具有int get()和int intValue()?我看到它还有来自Number的float floatValue()。是否有一个与维持AtomicInteger参数的原子性相关的含义,或者是否可以互换?

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:4)

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方法。

答案 2 :(得分:2)

来自Number class documentation

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

来自AtomicInteger documentation

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

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