👌

プログラミング自主学習 27日目 演算時、自動形変換/文字列を基本タイプに変換

2023/06/22に公開

自動形変換

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