본문 바로가기

IT自主学習 (2023.05.23~)/Java(2023.05.23~)

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

https://github.com/HyonHyonKOR/Thisisjava/tree/main/Chapter2/sec10

https://github.com/HyonHyonKOR/Thisisjava/tree/main/Chapter2/sec11

演算時、自動形変換

 

 

GitHub - HyonHyonKOR/Thisisjava

Contribute to HyonHyonKOR/Thisisjava development by creating an account on GitHub.

github.com

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);