0
// Demonstrate a Hashtable
import java.util.*;
class HTDemo {
    public static void main(String args[]) {
        Hashtable balance = new Hashtable();
        Enumeration names;
        String str;
        double bal;
        balance.put("John Doe", new Double(3434.34));
        balance.put("Tom Smith", new Double(123.22));
        balance.put("Jane Baker", new Double(1378.00));
        balance.put("Todd Hall", new Double(99.22));
        balance.put("Ralph Smith", new Double(-19.08));

        // Show all balances in hash table.
        names = balance.keys();
        while(names.hasMoreElements()) {
            str = (String) names.nextElement();
            System.out.println(str + ": " +
            balance.get(str));
        }
        System.out.println();

        // Deposit 1,000 into John Doe's account
        ***bal = ((Double)balance.get("John Doe")).doubleValue();***
        balance.put("John Doe", new Double(bal+1000));
        System.out.println("John Doe's new balance: " +
        balance.get("John Doe"));
    }
}
  1. bal = ((Double)balance.get("John Doe")).doubleValue();内有什么用doubleValue?(我知道它将对象转换为双值)但是如果我没有这个程序运行就可以了。
  2. (如果我错了,请纠正我) balance.get在这里得到一个双值对象,3434.34并且(双)在它前面进行拆箱并将其转换为双值的双对象,那么如何以及为什么doubleValue()将这个双3434.34对象视为对象??????
4

3 回答 3

2

我不确定我是否正确地回答了您的问题。我将尝试从我理解您的问题的角度进行解释。

  1. 是的,你是对的,你不需要doubleValue()。这只是一种明确告诉 Java 拆箱的方式。如果您不使用doubleValue(),Java 会自动将其拆箱。因此,如果 Java 不支持将原始类型自动 [un] 装箱为相应的 Object 类型,那么您将需要doubleValue()返回(Double)balance.get("John Doe")一个 Object 而bal它是原始类型的变量。
  2. 对于您问题的第二部分,在 Javadouble中是原始数据类型并且Double是对象类型。Java 集合 API,因此Hashtable只存储对象。它们不存储原始类型。因此,balance.get()返回一个对象。您将其转换为另一个类型的对象DoubledoubleValue()由于 Java 提供了自动装箱/拆箱,因此该方法在这里是可选的。

希望这可以帮助!

于 2012-05-09T05:01:23.513 回答
0

集合仅适用于 OBJECT 类型,而不适用于原始类型,创建包装类的原因之一,您无法存储3.4但您可以存储new Double(3.4),是的,正如您所说,您可以使用没有 doubleValue 的值,但它是一种标准方式做事。对于隐式调用和转换,在这种情况下,不同版本的 jvms/jre 的行为可能会略有不同,为了避免它们,您希望以标准方式进行操作,以免受到影响

于 2012-05-09T04:54:40.900 回答
0
  1. 在行 bal = ((Double)b​​alance.get("John Doe")).doubleValue(); doubleValue 的用途是什么(知道它将对象转换为双精度值),但如果我没有这个程序运行,程序运行正常。

正确的。

  1. (如果我错了,请纠正我)balance.get()得到一个值为 3434.34 的双对象,并且(双)在它前面进行拆箱

没有。没有(double)。有(Double)。这会将其从Objectto类型转换为Double

并将其转换为双重对象

是的。

双重价值

不,它是一个对象而不是一个值。这句话毫无意义。

那么 doubleValue() 如何以及为什么将这个双精度 3434.34 视为对象?

它没有。它调用 Double.doubleValue() 返回一个double.

此代码根本不使用自动装箱。doublevalue()自从 Java 1.5 大约 5 年前问世以来,这段代码中的调用就已经过时了。它也不使用泛型。我怀疑您正在查看一些非常古老的代码。

于 2012-05-09T05:25:12.567 回答