java小细节

java中的小细节

基础数据类型中的类型提升问题

    byte,short,char 这三个基础数据类型之间相互不转换,但是参与运算的时候,会将结果默认提升为int类型,或者long,float,double类型等。

    例如:

1         byte b1 = 3,b2 = 4 ;
2         byte b = b1 + b2;

3         byte b3 = (byte)(b1 + b2) ;

                4         byte b4 = 3 + 4 ;

                5          byte b5 = 3 + 125

                1.这几句代码会在第二行的编译出错:Type mismatch: cannot convert from int to byte

                这里系统默认将b1+b2的类型提升为int了,将int赋值给byte由大类型赋值给小类型自然后报错。将其强制转换成                      byte类型可以解决,如第三行。

                2.常量相加的时候,先运算,看其结果是否在接收的数据类型的范围之内

                     第四行代码执行没错,但是第五行就会报错,因为128已经超出了byte的表示范围,这是他会默认提升为int类型。

位异或

^ 连接两个数值

特点:一个数据被另一个数据位异或两次,值时它本身

用处:可以用来交换两个变量的值,位运算的执行效率更高。

例如: int  a = 10;

            int b = 20;

            a = a ^ b ;

            b = a ^ b ;

            a = a ^ b ;

这样就实现了a与b的值交换。

switch选择结构语句

1. switch后面的表达式可以是什么数据类型?

    Cannot switch on a value of type long. Only convertible int values, 

     strings or enum variables are permitted

    一个错误提示可以看出来,byte,int,char,short这些基本数据类型。long,float,double等都不可以。

    除此之外还有enum(枚举类型)jdk 5;

    String类型 jdk 7支持。

2.switch的case穿透

        switch的表达式会选中一个case,然后执行其中的语句,语句后有break语句,代表跳出switch循环。如果没有写break的话,它不会跳出循环,而是继续顺序执行下  一    个    case,直到碰到break或者语句执行完毕。

    例如:

     //1)创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//3)接收数据
System.out.println("请输入一个数字:");
int week = sc.nextInt() ;
//使用switch语句
switch(week) {
case 1:
System.out.println("星期一");
break ;
case 2:
System.out.println("星期二");
break ;
case 3:
System.out.println("星期三");
break ;
case 4:
System.out.println("星期四");
break ;
case 5:
System.out.println("星期五");
case 6:
System.out.println("星期六");
case 7:
System.out.println("星期日");
default:
System.out.println("您输入的数据不符合实际场景");

}

    我们在控制台输入5的话,程序输出结果为:

    星期五
    星期六
    星期日

    您输入的数据不符合实际场景

    这就是所谓的case穿透,要记得避免此类错误,当然如果应用场景可以善用它也会给我们带来方便。

+号的作用

    数学中的加法运算;表示正数;字符串拼接符。

    加好两边是数值类型的时候表示加法运算,有字符串出现则表示字符串拼接。

    例如:

    System.out.println("hello"+1+'a');

    输出结果为:hello1a

    System.out.println(1+'a'+"hello");

    输出结果为:98hello    1+'a'运算时会利用ASCII码运算,后面有字符串则为字符串连接


&& 和 ||的短路效果

    逻辑单或|:有true则true

    逻辑单与&:有false则false;

    逻辑双与&&和逻辑单与&的共同特点都是表示一种并列关系,有false则false
     逻辑双与&&特点:

     左边的表达式如果是false,那么右边不执行,具有短路效果!

     逻辑双或||:左边表达式是true,那么右边不执行,具有短路效果!

扩展赋值运算符的默认强制类型转换

     1        short s = 1 ;
     2  s = s +1 ;
//由于short这个类型参与运算,会提升为int类型,最终type mismatch:类型不匹配

     3         s = (short)(s+1) ; //强制类型转换

     4  s+=1;//扩展的赋值运算符:里面隐藏的了强制转换

第二行会报错,类型不匹配,3行将其强制类型转换,第四行却没错。

++和-- 的操作顺序

++和--表示自增或自减,++在变量前先自增在参与运算,++在变量后先参与运算在自增。

猜你喜欢

转载自blog.csdn.net/qq_38454165/article/details/80857528
今日推荐