👌
プログラミング自主学習 27日目 演算時、自動形変換/文字列を基本タイプに変換
自動形変換
1. int以下のデータタイプは演算時、自動的にintに変換される。
byte result = 10+20;
この場合は、byte resultの値はコンパイル時に自動的に30に演算され、バイトコードが作成される。
byte x=10; byte y=20; byte result= x+y
しかし、結果は、コンパイルエラーだ。
なぜなら、被演算子が変数でれば、(上は整数10と20、今はxとy)
プログラムを実行する際に、x+yの演算が実行され、intより範囲が狭いデータータイプはintに自動変換されるため、
intに演算する必要がある。
byte result = 10+20; -> OK
byte x= 10; byte y=20; byte result = x+y; -> ERROR
byte x= 10; byte y=20; int result = x+y; -> OK
2.精密度損失に気を付ける。
異なる変数の演算ならば、より大きなデータータイプに自動変換される。
int a = 10; double b= 0.5;
double result = int a + double b; -> int a(10) -> double a(10.0)-> 10.0+0.5 =10.5;
ただし、intをfloatに変換することはオススメしない。
理由としては、精密度損失は行うためである。
floatは仮数を23bitしかこめられないため、32bitの整数intを完全にこめられない。
3. 整数の演算時、doubleをキャストするか、自動にするか検討する。
javaはint型の整数を分けば、その値は必ず整数に出る。
javaの整数演算の例
5/2 =2.5 (x) 5/2=2(o)
より正確な値が欲しい場合はdoubleに変換する必要がある。
<問題>int x= 1; int y =2;
<解決1> double result = (double) x/y;
//xをdoubleに事前にキャストする。 結果値:0.5
<解決2> double result = x/ (double)y;
//yをdoubleに事前にキャストする。 結果値:0.5
<解決3> double result = (double) x/ (double) y ;
//x,y両方、事前にdoubleにキャストする。 結果値:0.5
<例外> double result = (double) (x/y);
int xとint yを演算した後(0)をキャストするため、結果値が0.0になる。
4.整数と文字列の演算時は、文字列に自動変換される。
String str = "3" + 7 -> "3"+"7"->"37"
String str = 3 +"7" -> "3"+"7"->"37"
String str = 1+2+"3" -> 3+"3" -> "33"
String str = 1+"2"+3 -> "12"+3 -> "12"+"3"->"123"
文字列タイプを、基本タイプに変換
String str ="10";
int a = Interger.parseInt(str);
int a =Integer.parseInt("10");
基本タイプを文字列に
String str = String.valueOf(基本タイプの値);
String str = String.valueOf(10);
Discussion