自動、強制類型轉換 | 變量作用域 | java初學筆記 新手理解

一 、自動類型轉換(隱式轉換)
自動類型轉換時不需要程序員去手動進行的,但是需要滿足兩個條件纔會進行。
1、兩種數據類型彼此兼容
2、目標類型取值範圍大於源類型的取值範圍
列出三種自動類型轉換的情況
1、byte→short→int→long
2、byte、short、int、char→float
3、byte、short、int、long、char、float→double

小類型轉換成大類型雖然不會出現數據丟失,但可能會出現精度丟失。
例如

int i=0x1000001;
float f=i;

分別輸出i和f的十進制和二進制結果
得到的結果是

16777217:::1000000000000000000000001
1.6777216E7:::1000000000000000000000000

可以發現精度是出現誤差的


二、強制類型轉換(顯示轉換)

當需要把大類型的數據轉入小類型內就需要進行強制類

int a=2;
byte c=a+2;

這是錯誤的,因爲a的取值範圍超過了byte的取值範圍,所以要進行強轉,格式如下

byte c=(bytea+2

當byte類型的值和另外一個數相加再賦給byte的時候也需要進行強轉。java無法判斷b的值是多少,並且java在進行整數運算時默認是按照int類型進行的,即使這個數沒有超過byte最大值。

byte b=5;
byte a=b+5;

強轉後

byte b=5;
byte a=(byte)b+5;
//轉換的格式如下
//目標類型  變量=(目標類型) 值
//byte b=(byte) null;

三、變量作用域
作用域就是變量在哪個範圍內有效,就是一對大括號括起來的範圍

public static void main (String [] args){
    int x=4;
    {
        int y=9;
    }
}

這一段代碼中,x的作用域是第一個花括號內的範圍,y的作用域是第二個花括號的範圍,當超出第二個花括號以後再調用y變量,是找不到的(這是因爲java虛擬機已經將他回收了)。

public static void main (String [] args){
    {
        int y=9;
        int x=5;
    }
    int x=4;
}

這樣是沒有錯誤的,因爲x=5中,這個x的作用域是第二個花括號,如果出了作用域是會被jvm自動回收的,而x=4已經出了第二個花括號,所以相當於只有一個x變量,不存在衝突。

public static void main (String [] args){
    int x=4;
    {
        int y=9;
        int x=5;
    }
}

這樣就不行了,因爲x=4的這個變量的範圍是整個的main方法,而x=5則是在x=4的作用域內,這時就會出現錯誤。


總結:
1、自動轉換通俗的說,把小杯子中的水倒進大杯子裏,這個命令是可以被你的僕人執行的,你不需要說他也會這麼做。強制類型轉換是把大杯子中的水倒進小杯子裏,僕人必須得到你的命令纔會這麼做,並且這麼做了之後小杯子中的水可能會裝不下大杯子中的水,從而流出來。這就是通常說的數據丟失
2、相同名稱可以放在同級代碼塊下,不會有衝突。放在上面則會造成一人專政,導致錯誤。

發佈了28 篇原創文章 · 獲贊 26 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章