java自动转换_java类型转换详解(自动转换和强制转换)
自動轉換
class Hello
{
public static void main(String[] args)
{
//自動轉換
int a = 5;
byte b = 6;
int c = a + b;
System.out.println(c);
}
}
a是int類型,b是byte類型 當二者進行加法運算時(根據同類型相加結果還是同類型 并且低類型的先轉換成高類型的然后在進行運算? 最后結果也是同類型的才行) 由于int的范圍比byte的取值范圍大這個時候jvm會自動將b轉換成int類型
強制轉換
//強制轉換
int a = (int)8.8;
強制轉換就是將前面加上要轉換的類型就可以了。
下面來看比較特殊的
class Hello
{
public static void main(String[] args)
{
byte b = 3;//正確
int x = 3;//正確
b = x;//錯誤
}
}
上面代碼在編譯的時候會報錯 常量3的類型為int?? int類型可以賦值給byte的變量??? 但是b=x這個時候就不行了呢?? 因為根據常量優化機制? 這種方式只針對 常量? 不針對變量 也就是說大范圍的不能賦值給小范圍? 除非用強制轉換類型
在看下面的也遵循上面的原則
class Hello
{
public static void main(String[] args)
{
byte b1=3,b2=4,b;//正確 (注:常量也有數據類型)
b = b1 + b2;//錯誤 因為b1 b2這個時候是變量(常量優化機制只針對常量不針對變量)
b = 3 + 4;//正確
}
}
上面的例子也就是所謂的二個默認? 當二個整數變量相加時? 默認是int類型相加? 當二個浮點型類型相加時? 默認是doblue類型相加
在看一個例子
class Hello
{
public static void main(String[] args)
{
short s = 1;
s = s + 1;//錯誤
和
short s = 1;
s+=1;//正確
}
}
上面的代碼從表面上看是沒什么區別的 為什么第二種寫法就正確了呢?
第一種算的時候? 會將s自動轉換為int類型在進行加法運算(低精度轉高精度)? 然后得出的結果是int類型? 在賦值給short類型 這樣是不合適的(高精度不能賦值給低精度類型)所以會報錯 正確的寫法如下面代碼
class Hello
{
public static void main(String[] args)
{
short s = 1;
s = (short)(s + 1);
System.out.println(s);
}
}
那第二種為什么是可行的呢?
因為+=、-+、*=、/=? 這些運算符比較特殊? 本身就具有強制類型轉換的作用。
總結
以上是生活随笔為你收集整理的java自动转换_java类型转换详解(自动转换和强制转换)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql选择索引逻辑_Mysql索引选
- 下一篇: java发送get post请求_【工具