9、数据类型转换
隐式转换(从小到大会自动转换)
当小的数据类型和大的数据类型进行运算时,小的数据类型会自动提升为大的数据类型,这就是隐式转换
byte,short,char --> int --> long --> float --> double
强制转换(从大到小须强制转换)
当要把大的数据类型赋值给小的数据类型是,需要加上强转符号-->()括号里面写小的数据类型。
【注意:byte,short,char之间不能进行隐式转换,因为他们进行运算时,都是自动提升为int类型进行运算的。】
10、面试题
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2; //编译出错,可能损失精度;
byte b4 = 3 + 4; //编译通过,运行b4 = 7;
原因: byte b3 = b2 + b1;
A:【byte与byte、short、char进行运算的时候,都会自动提升为int类型进行运算】,两个int类型的变量相加,结果还是int了性,把大的int类型赋值给小的byte,可能损失精度。
B:b1和b2是两个变量,编译器是不知道变量里面的具体数值的,两个byte类型的变量相加,其结果有可能超出byte范围,所以有可能会损失精度。
byte b4 = 3 + 4;
java有常量优化机制。3和4是两个整数常量,编译器在编译的时候,就已经把3+4的结果7算出来了,然后它再判断7在不在byte 的取值范围内,所以不报错。
字符串和数据类型的运算
任何数据类型用 + 与字符串相连接都会产生新的字符串,这里的 + 是连接符。
打印结果加()是提升()里面的运算顺序。
ASCII码表
'a' = 97
'A' = 65
'0' = 48
11、运算符
①什么是运算符?
就是对常量和变量进行操作的符号
②运算符的分类
算术运算符
赋值运算符
关系运算符
逻辑运算符
位运算符
三元运算符
③算数运算符有那些?
“+,-,*,/,%,++,--”
【注意事项】:
⑴+ 在java中有三种作用,代表正号,做加法运算,字符串的连接符。
⑵整数相除只能得到整数,如果想要得到小数,必须把数据变化为浮点数类型。(只变化一个就可以,另一个会自动提升)
⑶/运算符获取的是除法操作的商,%获取的是除法操作的余数
⑷%运算符
a.当左边的绝对值小于右边的绝对值时,结果是左边
b.当左边的绝对值等于右边或是右边的倍数时,结果为0
c.当左边的绝对值大雨右边的绝对值是,结果是余数
d.%运算符结果的符号只和左边有关系,与右边无关
e.任何一个正整数%2的结果不是0就是1可以用来当作切换条件。
⑸++ -- 运算符(隐含有强制类型转换)
A.单独只用
放在操作数的前面和后面结果一样。(这种用法是我们比较常见的。)
B.参与运算使用
a.放在操作数的前面(左边),先自增或者自减,然后再参与运算。
b.放在操作数的后面(右边),先参与运算,再自增或者自减。
++ int x = 5;
int y = x++;
System.out.println(x+","+y);
第一步,运行x ,值没变化; 第二步 运行 x++, x自增1 x=6;第三步 把第一步的值赋给y, y=5 ;
++ int x = 5;
x = x++;
第一步, 运行x ,x值没变化; 第二步,运行x++ x自增1 x=6; 第三步 把第一步的值赋给x, x= 5
++ int x = 5;
int y = x++;
System.out.println(x+","+y);
可以这样理解
临时存储变量temp
y = x++等同于 先创建一个临时存储变量temp,将x的值赋给temp temp = x = 5; 然后x自增,x=6;然后在拿着临时存储变量temp里的值 赋给y y = temp = 5
④赋值运算符
基本的赋值运算符:= 把右边的值赋给左边(左边必须是变量)
扩展的赋值运算符:+= -= *= /= %= 把左右两边的值进行扩展运算,再赋值给左边(左边必须是变量)
特点: 扩展的赋值运算符本身含有强制类型转换
⑤关系运算符(比较运算符,条件运算符)
==,!=,>,<,>=,<=
【注意事项】:无论操作是简单还是复杂,结果都是boolean类型
==不能写成= 前面是比较运算符 后面是赋值运算符 |