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

 那第二種為什么是可行的呢?

因為+=、-+、*=、/=  這些運算符比較特殊  本身就具有強制類型轉換的作用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM