0

d宣言された asdoubleと notを使用してこのプログラムを作成しようとしてDoubleいましたが、このプログラムが実行されない理由を教えてください。プリミティブ データ型のボックス化とボックス化解除のように、自動的にラップとアンラップが行われるはずではありませんか? PS-私はJavaが初めてで、実際に何として知られているのか覚えていませんが、プリミティブ型のボックス化およびボックス化解除と呼ばれてメソッドを実行することをどこかで読みました。

public class ToStringDemo {

    public static void main(String[] args) {
        double d = 858.48;
        String s = d.toString();

        int dot = s.indexOf('.');

        System.out.println(dot + " digits " +
            "before decimal point.");
        System.out.println( (s.length() - dot - 1) +
            " digits after decimal point.");
    }
}

注 - 上記のプログラムでエラーが発生しますString s = d.toString();

4

7 に答える 7

2

文字列 s = d.toString();

double逆参照できないため、エラーが発生しやすいコードです。明示的にボックス化する必要がありますDouble((Double)d).toString().

doubleはプリミティブ型で、メソッドはありませんtoString。オブジェクトのみにメソッドが含まれます。そして、クラスtoStringのメソッドであり、メソッドを持つものObjectを使用できます。DoubletoString

Double d = 858.48;
String s = d.toString();
于 2013-05-29T11:28:21.383 に答える
1

doubleはプリミティブ データ型ですDoubleが、 はラッパー クラスです。Double を使用すると、 のようなメソッドを呼び出すことができますtoString()。次のようなことができます

Double d = 2.4;
d.toString();

しかし、あなたは次のようなことはできません

double d = 2.4;
d.toString();    // Generates compile time error.
于 2013-05-29T11:30:38.893 に答える
1

-のようなプリミティブ型でメソッドを呼び出すことはできませんがdouble、 のようなラッパー型でメソッドを呼び出すことはできますDouble。そのため、指定したコードは機能しません。

ボクシングは自動的に行われますが、コンバージョンのターゲットを効果的に与えた場合のみです。たとえば、次を使用できます。

double d = 858.48;
Double boxed = d;
String text = boxed.toString();

...しかし、その中間の変換Doubleは、コードで言及されていなければ起こりません。もちろん、1 行で実行することもできます。

String text = ((Double) d).toString();

値を文字列に変換するためにボックス化する必要はまったくありません。

String text1 = String.valueOf(d);
String text2 = Double.toString(d);

...両方とも機能します。

于 2013-05-29T11:29:49.360 に答える
0

これを試して..

 public class ToStringDemo {

public static void main(String[] args) {
    double d = 858.48;
    String s = String.valueOf(d);
    int dot = s.indexOf('.');
    System.out.println(dot + " digits " +
        "before decimal point.");
    System.out.println( (s.length() - dot - 1) +
        " digits after decimal point.");
}
}
于 2013-05-29T11:29:16.803 に答える
0

参照がないため、自動ボックス化されていませんDouble。試す((Double)d).toString()

于 2013-05-29T11:29:58.630 に答える
0

d.toString(); d はプリミティブ型であるため、機能しません。オブジェクトでのみ .toString 関数を呼び出すことができます。したがって、オブジェクトでありプリミティブではない Double を使用すると、コードが機能します。オートボクシングとは関係ありません。

于 2013-05-29T11:30:24.877 に答える
0

プログラムが実行されない理由は、プリミティブ データ型でメソッドを呼び出そうとしているためです。大文字の D double は、double オブジェクトを表します。このオブジェクトは、double 値を格納するという点でプリミティブ double 変数と同様に機能しますが、定義済みのメソッドを呼び出すことができる機能が追加されています。

double プリミティブを使用したい場合は、次のようにすることができます。

double aDouble = 100;
String aString = Double.toString(aDouble);

プリミティブは、文字列を返す Double オブジェクトのメソッドにパラメーターとして渡されます。

于 2013-07-16T18:48:07.230 に答える