java中的小细节

 

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

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

byte b1 = 3,b2 = 4 ;
 byte b = b1 + b2;
 byte b3 = (byte)(b1 + b2) ;
 byte b4 = 3 + 4 ;
 byte b5 = 3 + 125

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

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

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

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

 

位异或:^

^ 连接两个数值

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

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

Java开发中convertor是什么 java convert类_自增

这样就实现了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的话,程序输出结果为:

   

Java开发中convertor是什么 java convert类_与运算_02

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

 

+号的作用

    1.数学中的加法运算;

    2.表示正数;

    3.字符串拼接符。

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

    例如: 

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行将其强制类型转换,第四行却没错。

++和-- 的操作顺序

++和--表示自增或自减,

++在变量前:先自增再参与运算,

++在变量后:先参与运算再自增。

int i = 6;
int a = i++;
//输出a等于6;
int b = ++i;
//输出b等于7;