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类型。
位异或:^
^ 连接两个数值
特点:一个数据被另一个数据位异或两次,值是它本身
用处:可以用来交换两个变量的值,位运算的执行效率更高。例如:
这样就实现了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穿透,要记得避免此类错误,当然如果应用场景需要的话可以善用,它也会给我们带来方便。
+号的作用
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;