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会自动提升类型去匹配可变参数列表,当有多个都能匹配的时候,就不能确定哪一个,从而出现编译错误。

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