三木915

导航

 

由于Java是强类型语言,所以要进行有些运算的适合,需要用到类型转换。

float大于long是因为浮点的优先级大于整数

byte short char 都很小

float double 很大

int i = 128
byte b = i 这个时候就会报错,需要进行转换
byte b = (byte)1;
System.out.println(i);//得到的值为128
System.out.println(b);//得到的值为-128
因为byte 最高值为127 当强制转换后得到的值超过其本身最大值就会出现内存溢出因为溢出了所以得到的值并不确定
    所以再转换的适合尽量避免内存溢出

//强制转换 (类型)变量名 高级别到低级别

//自动转换 什么都不要写 低级别到高级别自动转换


注意

  • 不能对布尔值进行转换
  • 不能把对象类型转换为不相同的类型
  • 在把高容量转换到低容量时候需要强制转换
  • 转换时可能存在内存溢出,或者精度问题

精度问题解释

System.out.println((int)24.7) //得到的是24而不是24.7
System.out.println((int)-47.89f) //得到的是-47而不是*47.89

小数的等级高于整数等级

对于为什么高容量转换为低容量需要强制转换但是低容量转换为高容量可以自由转换

我自己的理解是这属于数学的所属关系,高容量本身就包括了低容量,所以低容量向高容量转换的时候不会出现问题,或者说精度问题。

因为小数所包含的容量高于整数所以对于小数而言整数只是小数的一部分,所以如果数值进行转换不会有什么问题。但是整数不包含小数,小数向整数转换时就会丢失小数。至此就会出现精度问题

转换示例

char c = "a";
int d = c+1;
System.out.println(d) //OUtcome= 将a转换为u表中对应的数字+1=98
System.out.println((char)d) //0utcome=将System.out.println(d)中得到的98再套一层char 在u表中98=b所以输出的结果为b

操作比较大的数的时候,注意溢出问题

JDK7新特性,数字直接可以用下划线分割开

例:10_0000_000可以表示1000000000

int money = 10_0000_0000
int years = 20 
int total = money*years 
System.out.println(total)//outcome 结果溢出
long total2 = money*years 
System.out.println(total2)//outcome 结果溢出
为什么在用long之后结果还是溢出 //因为long赋值变量的时候计算还是以int去计算得到了结果之后再去转换为long 但是在转换之前数据就已经溢出了,所以在转换后得到的结果还是溢出的。
long total3 = money*((long)years)//这里将int years强制转换为long years 则计算的时候自动转换,就不会出现结果溢出。//outcome = 20_0000_0000
    是不是只是转换了一个高级了之后高级在与低级进行乘法计算的时候低级也会自动转高级?
    
    
posted on 2022-01-04 19:31  三木915  阅读(29)  评论(0编辑  收藏  举报