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);
'IT自主学習 (2023.05.23~) > Java(2023.05.23~)' 카테고리의 다른 글
プログラミング自主学習 29日目 ArithmeticExeption・Infinity・Nan (0) | 2023.06.24 |
---|---|
プログラミング自主学習 28日目 コンソルで変数の値出力/キーボードで変数の値入力/符号・増減演算子/算術演算子/ (0) | 2023.06.23 |
プログラミング自主学習 25日目 変数(with CS) (0) | 2023.06.20 |
プログラミング自主学習 24日目 Java8->Java17,VSCODE (0) | 2023.06.19 |
プログラミング自主学習 23日目 変数 (0) | 2023.06.18 |