• 【JAVA】【基础语法】Java中条件表达式的参数类型转换


    参考:https://blog.51cto.com/12139097/2567558

    一、?:表达式中,:前后的两个参数类型如何呢?

    (1) 如果第1个和第2个操作数具有相同的类型,那么它就是条件表达式的类型。
    (2) 如果一个操作数的类型是T,T表示 byte、short 或 char,而另一个操作数是一个int类型的常量表达式,它的值是可以用类型T表示的,那么条件表达式的类型就是T。
    (3) 否则,将对操作数类型运用二进制数字提升,提升至两个参数中类型最高的类型,而条件表达式的类型即提升之后的类型。

    对于这个结论,小编做了以下实验(以char类型为例):

    //定义变量
    static Character c1 = 'w';
    static Integer i1 = 1;
     public static void main(String[] args) {
            Object k;
            System.out.println(k = true ? 'x' : 1.11);        //第1个操作数为char类型,第2个操作数为double类型,符合结论3,表达式类型向上转为Double类型。
            System.out.println(k = true ? c1 : 1);            //第1个操作数为char类型,第2个操作数为int类型,但i1却是变量不是常量表达式,符合结论3,表达式类型向上转为Integer类型。
            System.out.println(k = true ? c1 : i1);           //第1个操作数为char类型,第2个操作数为int类型,且这个表达式的结果恰好可以由char类型表示,符合结论2,表达式类型向上转为Character类型。
            System.out.println(k = true ? c1 : i1+1);        //第二个操作数为char类型,第三个操作数为int类型,但i1却是变量不是常量表达式,符合结论3,表达式类型为Integer类型。
            System.out.println(k = true ? c1 : 1+1);        //第二个操作数为char类型,第三个操作数中含有变量,不是常量表达式,符合结论3,表达式类型为Integer类型。
            System.out.println(k = true ? c1 : 'x'+'x');        //第二个操作数为char类型,第三个操作数为int类型常量表达式,且这个表达式的结果恰好可以由char类型表示,符合结论2,表达式类型为Character类型。
            System.out.println(k = true ? c1 : c1 + c1);        //第二个操作数为char类型,第三个操作数为char字符相加的和,字符相加,转换成Ascii码计算,所以是int类型常量表达式,且这个表达式的结果恰好可以由char类型表示,符合结论2,表达式类型为Character类型。
            System.out.println(k = true ? c1 : c1 + 'x');        //第二个操作数为char类型,第三个操作数中含有变量,不是常量表达式,符合结论3,表达式类型为Integer类型。
            System.out.println(k = true ? 'x' : 65535);        //第二个操作数为char类型,第三个操作数中含有变量,不是常量表达式,符合结论3,表达式类型为Integer类型。
            System.out.println(k = true ? c1 : 65536);        //第二个操作数为char类型,第三个操作数为int类型表达式,且这个表达式的结果恰好可以由char类型表示,符合结论2,表达式类型为Character类型。                                   
            System.out.println(k = true ? c1 : -1);            //第二个操作数为char类型,第三个操作数为int类型表达式,但这个表达式的结果不能用char类型表示,符合结论3,表达式类型为Integer类型。第二个操作数为char类型,第三个操作数为int类型表达式,但这个表达式的结果不能用char类型表示,符合结论3,表达式类型为Integer类型。 
     }
    

    注:char表示的范围是:0~65535

    So,建议?:表达式中,:前后的两个参数类型相同,或通过显式的类型转换,保持两者类型相同,避免非预期的结果。

  • 相关阅读:
    PHP实现html字符实体转汉字
    利用 secureCRT 直接上传下载文件 (sz,rz)
    CentOS安装scp命令
    以Apache模块的方式编译安装php-5.5.4
    编译安装 apache 2.4.6
    协方差Covariance的表述推导
    Java _ JDK _ Arrays, LinkedList, ArrayList, Vector 及Stack
    Java_一些特殊的关键字详(?)解
    Java_你应该知道的26种设计模式
    排序与搜索一览
  • 原文地址:https://www.cnblogs.com/yickel/p/14594956.html
Copyright © 2020-2023  润新知