java 類型自動提升和強轉,不注意就要拉褲裏!

java類型提升機制比較常見,但是比較隱蔽,特別是自動強轉類型的時候,如果不注意就可能出錯。

涉及基本元素的自動提升類型場景有:

  • 不同類型進行四則運算的時候,會自動提升類型到類型最高元素的類型
  • += 和 -= 會自動提升類型,然後再強轉回來
  • 位運算符比int類型低的會自動提升成int類型
  • <<= 和>>= 會轉成int類型再強轉回來
  • 三元操作符 ? : 會像四則運算一樣自動提升類型,但是不會把強轉回來

涉及到方法重載時的類型提升

在方法重載的時候,如果參數類型不嚴格匹配,會自動提升參數類型,這個對類對基本類型都是如此,但是涉及到可變參數的時候,可能會出現編譯錯誤:

import java.util.*;
public class Main1{
    int i=10;
    public static void main(String[] args) {
        Main1 s  =  new Main1();
        s.f(1,'a');//編譯正確,匹配第一個f,1提升成1.0去匹配第一個
        s.f('a','b');//編譯錯誤,編譯器會提升‘a’到float,出現歧義

    }
    void f(float i,Character...a){}
    void f(Character...a){}



}

java會自動提升類型去匹配可變參數列表,當有多個都能匹配的時候,就不能確定哪一個,從而出現編譯錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章