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何ですか? (オブジェクトを double 値に変換することは知っています)が、これなしで実行するとプログラムは正常に実行されます。
  2. (私が間違っている場合は修正してください) balance.getここで値の double オブジェクトを取得し、3434.34その前に( double )ボックス化を解除して double 値の double オブジェクトに変換します。次に、doubleValue()この double をオブジェクトとして扱う方法と理由3434.34?????
4

3 に答える 3

2

私はあなたの質問を正しく得たかどうかわかりません。私はあなたの質問が何であるかを私が理解したという観点から説明しようとします。

  1. はい、その通りです。doubleValue()は必要ありません。これは、Javaにボックスを解除するように明示的に指示する方法にすぎません。を使用しない場合doubleValue()、Javaは自動的にボックスを解除します。したがって、Javaが対応するオブジェクトタイプへのプリミティブタイプの自動[アン]ボックス化をサポートしていない場合は、プリミティブタイプの変数である間にオブジェクトを返す必要doubleValue()があります。(Double)balance.get("John Doe")bal
  2. 質問の2番目の部分では、Javaではdoubleプリミティブデータ型でDoubleあり、オブジェクト型です。JavaコレクションAPIであるため、Hashtableオブジェクトのみを格納します。プリミティブ型は格納されません。したがって、balance.get()オブジェクトを返します。タイプの別のオブジェクトにキャストしますDoubledoubleValue()Javaによって提供される自動ボクシング/アンボクシングのため、このメソッドはここではオプションです。

お役に立てれば!

于 2012-05-09T05:01:23.513 に答える
0

コレクションは OBJECT 型でのみ機能し、プリミティブ型では機能しません. ラッパー クラスが作成された理由の 1 つは、格納できませんが、格納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 の使用は何ですか (オブジェクトを double 値に変換することを知っています) が、これなしで実行してもプログラムは正常に実行されます。

正しい。

  1. (間違っていたら訂正してください)balance.get()値 3434.34 の double オブジェクトを取得し、(double) その前でボックス化解除を行います

いいえ、ありません(double)。あります(Double)Objectそれはそれを からに型キャストしDoubleます。

それをdoubleオブジェクトに変換します

はい。

double値で

いいえ、値ではなくオブジェクトです。この言葉は無意味です。

では、 doubleValue() がこの double 3434.34 をオブジェクトとして扱う方法と理由は何ですか?

そうではありません。を返す Double.doubleValue() を呼び出しますdouble

このコードは、オートボクシングをまったく使用していません。このコードのdoublevalue()呼び出しは、約 5 年前に Java 1.5 が登場して以来、廃止されています。また、ジェネリックも使用しません。非常に古いコードを見ているのではないかと思います。

于 2012-05-09T05:25:12.567 に答える