2017-11-27 11 views
-2

私はドルをユーロに変換するアプリを作ろうとしています。このコードは機能しますが、私は1つのことがわかりません。私がコンバージョンをするとき、私はなぜドルの価値も変わらない理由は分かりません。私が意味することは、ドルをドルに割り当てるとき、私はそれらが両方とも同じDoubleオブジェクトを指し示すようにするので、両方のDoubleオブジェクトの中のダブルフィールドが変わるべきではありませんか?もしそうなら、なぜですか?Double変数が両方とも同じ値で更新されないのはなぜですか?

EditText editText= (EditText) findViewById(R.id.editText); 
//Extract string from there 
String message = editText.getText().toString(); 
//Convert amount to dollars 
Double dolars = Double.parseDouble(message); 
Log.i("Dolars before", dolars.toString()); 
Double euros = dolars * 0.835791; 
Log.i("Euros",euros.toString()); 
Log.i("Dolars after",dolars.toString());e` 
+0

あなたは明確になりますか?あなたは「私がドルラーにユーロを割り当てるとき」と言ったが、これはどこで起こるのだろうか? –

+0

はい、あなたはそれにユーロを割り当てずに再び帳簿を印刷しています –

答えて

1

最も簡単な答えは、その内容が変更できないことを意味し、Doubleインスタンスは不変であるということです。

また、のは、割り当てラインを見てみましょう:

Double euros = dolars * 0.835791; 

この行が自動ボクシングと自動アンボクシングと呼ばれるJavaの機能を活かしています。あなたが明示的になりたいと思った場合、あなたはこのようにそれを記述します

Double euros = Double.valueOf(dolars.doubleValue() * 0.835791); 

はこのような長い形式を書かれて、あなたは、dolarsから原始doubleを抽出する乗算を行い、その後、ラップしていることがわかります結果をeurosに割り当てます。したがって、値/参照の「共有」はここにありません。

+0

とても助かりました。ラッピングすると、返されるdouble値がDouble eurosのdoubleフィールドに配置されることを意味しますか? –

関連する問題