Java学习笔记(三):数据类型转换
1.类型转换
1.自动类型提升:当byte short char在参与运算时会自动提升为int类型。
如果还有long、float、double类型参与运算,则会相应的提升为long、float、double类型
/*例1 byte a=10;
byte b=20;
byte c=a+b;
编译会报错,因为s,b参与运算时提升为int类型,byte接收不了int类型
例2 byte a=10;
byte b=20;
long c=1L
byte d=a+b+c;报错,abc都提升为long,计算结果也为long,byte接受不了
*/
*常量优化机制:在多个常量运算时,会先把结果计算出来,然后在看结果是否在数据范围内,在则不报错
如:byte r=3+4;//不报错,如果结果超过127则报错
***优先级:byte → short,char → int → long → float → double
优先级高 → 优先级低:强转;int c =(int)17.2
优先级低 → 优先级高:自动转换;
2.强制类型转换:丢弃多余字节,可能发生精度损失。
格式:byte c = (byte)a+b;//a,b为byte
*补充知识点1:定义 char ch = '我';
JAVA采用GBK编码就不会报错,因为其占两个字符;
如果使用UTF-8编码,一个汉字占用3个字节,char只能存储2个字节,故会报错;
*补充知识点2:操作大数字的时候,注意溢出问题
int money = 1000_000_000;
int years = 20;
int total = money*years;//-147836480,计算时数据已经溢出
long total = money*years;//结果也为-147836480,原因是,计算结果转换之前(int)money和(int)years已经完成计算,数据已经溢出
解决方法:
long total3 = money*((long)years);//计算前先把一个数转换成long
3.字符参与运算
char ch ='a';
int r = ch+1;
运行结果为98。字符在参与运算时,会查找ASCII码表,用字符运算时就是这个字符编码的10进制值
常用:a 97; A 65; 0 48
2.运算符
1.+ 加号,有两层作用
第一个作用,起数学方面相加作用
第二个作用,起一个连接符的作用
拼接符:当加号的运算两边有任意一边是一个字符串,那么加号就会起连接符的作用,将两端内容拼接起来形成一个新的字符串
每次运算前都会看符号两边有没有字符串:
System.out.println(2+"22");//222
System.out.println(20+30+"22");//5022
System.out.println("22"+1+2);//2212
2. += 如果对short类型数据进行操作时超过范围,会自动进行数据转换
3.区分 逻辑运算符 和 位运算符
逻辑运算符:与(&&) 或(||) 非(!)
位运算符:与(&) 或(|) 取反(~) 异或(^)
例题:最快计算2*8的方法
答:位运算。位运算直接和底层打交道,效率极高。(2<<3),2左移3位,结果16
三元运算符:x?y:z;
如果x为真,则结果为y,否则为z。