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行将其强制类型转换,第四行却没错。
++和-- 的操作顺序
++和--表示自增或自减,++在变量前先自增在参与运算,++在变量后先参与运算在自增。