【发布时间】:2013-08-24 06:49:18
【问题描述】:
为什么 AtomicInteger 既有 int get() 又有 int intValue()?我看到它还有来自 Number 的 float floatValue() 等。是否具有与保持 AtomicInteger 参数的原子性相关的含义,或者两者都可以互换?
【问题讨论】:
为什么 AtomicInteger 既有 int get() 又有 int intValue()?我看到它还有来自 Number 的 float floatValue() 等。是否具有与保持 AtomicInteger 参数的原子性相关的含义,或者两者都可以互换?
【问题讨论】:
它们应该可以互换。以下是AtomicInteger源代码的相关部分:
public int intValue() {
return get();
}
【讨论】:
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 方法。
【讨论】:
AtomicInteger 需要它们仍然无法解释。
抽象类 Number 是 BigDecimal、BigInteger、Byte、Double、Float、Integer、Long 和 Short 类的超类。
从班级复制的描述:
Number 以 int 形式返回指定数字的值。这可能涉及舍入或截断。
由于AtomicInteger 扩展了抽象类Number,所以必须实现抽象方法intValue()。在这种情况下它们是相等的。对于其他类型(例如BigDecimal、Double 或Float),它更有意义。
【讨论】: