2016-04-03 22 views
1

これは非常に奇妙です。 ?第二に、どのように56.00 + 3が56.03であること、このことが可能であり、int型を追加する文字列をどのように来るdoubleをint型に変換した文字列に変換する

public static void main(String [] args) { 
    double db = 56.00; 
    String st = String.valueOf(db); 
    System.out.print(st+3); 
} 

私は

56.03 

まずあり得る出力:次のコードはありますか?

+1

コンパイラの変更 'System.out.print(ST + 3);' 'System.out.print(新しいのStringBuilderへ(st).append(3)); 'あなたの出力。 –

+0

「56.00」は「56.0」と表されます。意味のある数字のコンセプトは存在しません。それは、それが分数であるという概念だけです(「ダブル」のため)。 –

答えて

12

文字列連結を実行しています。 stの値は"56.0"であり、それとintの連結を実行しており、結果は"56.03"です。

文字列連結+演算子は、JLS 15.18.1で記述されています。

オペランド式がString型の場合は、実行時に文字列変換(5.1.1)が実行され、他のオペランドが文字列を生成します。

そしてJLS 5.1.11含む:

の値プリミティブ型TのX最初に適切なクラスインスタンス生成式(15.9)への引数として与えているかのように基準値に変換されます。

[...] Tbyteshort、またはintであれば、new Integer(x)を使用しています。

[...]そうでない場合、変換は、引数なしで参照オブジェクトのメソッドtoStringの呼び出しによって行われます。 toStringメソッドを呼び出した結果がnullの場合は、代わりに文字列"null"が使用されます。言い換えれば

、この場合、あなたのプログラムは、基本的には、次のとおりです。

double db = 56.00; 
String st = String.valueOf(db); // "56.0" 
System.out.print(st + new Integer(3).toString()); // "56.0" + "3" = "56.03" 
関連する問題