Java 条件表达式结果的隐式转换

 

public class IN0102 {
    public static void main(String[] args) {
        int a = 'a';
        System.out.println(a);//97
        float f = (float) 3.2;
        
        float sum =1.5f;
        int num=2;
        System.out.println((sum<2?1:num/sum));//1.0
        System.out.println("------------------------------------------");
        
        int x = 6;
        double d = 7.7;
        System.out.println((x>d) ? 8.0:9);//9.0
        System.out.println("------------------------------------------");
        
        System.out.println(false ? 3.0 : 1);//1.0        
        System.out.println( false ? 1 : 'a');//a
        System.out.println( false ? 1.0 : 'a');//97.0        
        System.out.println( true ? 98 : 'a');//b
        System.out.println( true ? 98.0 : 'a');//98.0
    }
}

JAVA条件表达式,注意以下几点:

 1、如果冒号两边,是同一种类型,那么该条件表达式的值也是同一种类型。

2、如果其中一边的类型是byte、short或者char(暂且统称为X类型),而且另外一边是int常量(注意是常量),而且这个常量可以用X类型表示(也就是不溢出),那么,结果就是X类型。比如:

System.out.println( true ? 98 : 'a');     输出: b

3、如果不符合上述情况的,则自动隐式转换,即小范围的转换成大范围的,低精度的转换成高精度的类型,最后的结果就是转换后的类型。比如:

System.out.println( false ? 1.0 : 'a');   输出: 97.0

 

最好还是不要这样哈 一直在旁边提示dead code【无用代码】

 

关于for的执行顺序:

 

public class Delta {
   static boolean foo(char c) {
     System.out.print(c);
     return true;
   }
   public static void main( String[] argv ) {
     int i =0;
     for ( foo(‘A’); foo(‘B’)&&(i<2); foo(‘C’)){
         i++ ;
         foo(‘D’); }
   }
 }
//结果输出为:ABDCBDCB

 

 

 

 

 

break continue 加一个标号

 

public class IN0102 {
    public static void main(String[] args) {
        lab: for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 10; j++) {
                if (j > 1) {
                    continue lab;
                }
                System.out.println("continue");
            }
            System.out.println("************");
        }

    }
}

 

continue
continue
continue
continue

 

 

 

 

public class IN0102 {
    public static void main(String[] args) {
        lab: for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 10; j++) {
                if (j > 1) {
                    break lab;
                }
                System.out.println("break");
            }
        }

    }
}

break
break

 

 

 

 

posted @ 2019-12-27 17:45  像走了一光年  阅读(387)  评论(0编辑  收藏  举报