数据类型转换-运算符
##基本数据类型转换
- 默认顺序是
* byte->short->int->long->float->double
- 自动提升规则(针对二元操作符)
* 所有的byte,short,char型会自动提升为int型
* 若一个操作数是long类型,则另一个操作数也会转换为long类型,计算的结果类型也是long类型
* float类型,double类型跟long类型的提升规则一样
- 注意
* 默认浮点型是double类型,默认整型是int类型
* 举例说明:
```
float f1=4.4;//编译会报错;因为4.4默认是double类型;可以强制转换解决问题
float f2=4.4f;//定义float型时要加f
long d1=100;//默认转型:100将会由int转换为long类型
long d2=100L;//定义long类型时加L
```
## 理解代码 i=i++
```
int i=1;
i=i++;
System.out.println("i="+i)//i=1;
分析:i=i++;
1.首先在内存中定义一个临时变量temp存储i的值
int temp=i;//temp=1;
2.执行i++;
i++;//i=2;
3.再将临时变量temp值赋值给i
i=temp;//i=1
总结:是先存储i,再执行i++,最后执行赋值操作
练习:i= i+++++i; //i=4;
```
##数据类型补充的小问题:
- 1: 在定义Long或者Float类型变量的时候,要加L或者f。
整数默认是int类型,浮点数默认是double。
- 2 byte,short在定义的时候,他们接收的其实是一个int类型的值。
这个是自己做了一个数据检测的,如果不再它们的范围内,就报错。
2:byte值的问题
byte b1 = 127;
byte b2 = (byte)128; //-128(从-128~127一直循环)128-127=1;即从第一个 -128 开始循环
byte b3 = (byte)129; //-127
byte b4 = (byte)130; //-126
byte的范围:-128 ~ 127
128:10000000
-128:10000000 (这里的1即是符号位,也是数值位)
- 3:数据类型转换之默认转换
byte,short,char -- int -- long -- float -- double
long: 8个字节
float:4个字节
A:它们底层的存储结构不同。
B:float表示的数据范围比long的范围要大
long:2^63-1
float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1
4:Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
可以。因为java语言中的字符占用两个字节。
Java语言采用的是Unicode编码。