2017-03-16 5 views

答えて

8

TL; DR:調整できません。

文字列補間を使用するときにバイトコードを見ると、StringBuilderが使用されていることがわかります(現代のJavaコンパイラでは+の連結と同じです)。

単なる例として、あなたはこのコードを取る場合:

val kt = "Kotlin" 
println("hello $kt") 

(適度に読みやすいです)バイトコードの動作は次のようになり、文字列テンプレート:バックポイントへ

LINENUMBER 8 L2 
NEW java/lang/StringBuilder 
DUP 
INVOKESPECIAL java/lang/StringBuilder.<init>()V 
LDC "hello " 
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; 
ALOAD 1 
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; 
INVOKEVIRTUAL java/lang/StringBuilder.toString()Ljava/lang/String; 
ASTORE 2 

。では、doubleを追加するときに、StringBuilderが使用するのは問題です。ドキュメントを参照する場合は、String.valueOf(double)メソッドを使用し、次にDouble.toString(double)メソッドを使用します。ドキュメントhereを参照すると、与えられた値のフォーマット方法がわかります。短い要約:小数点の区切り文字として.を使用し、非常に小さい数値と非常に大きな数値に対してはEという指数表記を使用します。

別のフォーマットをしたい場合は、最後のリンクのドキュメントにNumberFormatを使用するように指示されています。またLocaleに渡すことができるString.formatを提案します。

+2

ありがとう@ zsmb13、検査のためにバイトコードを使用する巧妙な考え。 – linqu

関連する問題