java类型转换优先级_Java学习笔记(三):数据类型转换及运算符

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。

你可能感兴趣的:(java类型转换优先级)