类型转换
由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。
低------------------------------------------高
byte ->short -> char ->int ->long->float->double
运算中,不同类型的数据先转换为同一类型,然后进行运算。
为什么 float 的四个字节比 long 类型的8个字节大,因为小数的优先级一定大于整数。
强制类型转换
从蓝色方框中可以看到,int 类型转换到了 byte 类型,int 的输入是 128 ,输出是128。而 int转换为 byte 类型之后,输出竟然为 -128。这是因为,内存溢出,为什么会内存溢出,是因为 高到低,这个高低是指它的容量。就像大瓶子水倒入小瓶子中会存在溢水现象。
这种情况就是叫做 强制类型转换。那么强制类型转换是如何进行的呢?
int i = 128 // 首先定义 int 中 i 的值为 128
byte b = (byte) i ; // 通过把想要转换的类型 ( byte )然后后面加一个 变量名 i
再如下图,首先可以知道,23.7是 float 类型,-48.59f 是 double 类型。那么从图中可知,两个都是浮点数类型都被强转为 整数 int 类型,属于 高到低。两个浮点数在被强转为 int 类型之后。数值都发生了改变。输入分别为 23.7 和 -48.59f ,被转输出后,为 23 和 -48 . 由此可知,数据的精度受到了影响。
/*
从上面两个图可知的几个注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.把高容量转换为低容量的时候,强制转换
4.转换的时候可能存在内存溢出,或者精度问题!
*/
再此再举一个例子,如下图,让 字符类型 char 加 int 整数类型。char 转成 int 。由于 a=97 , 将 int 强转为 char 之后 ,输出得到 b. 因为 a + 1 = 98,b =98。
再如图,就是说,当操作数比较大的时候,要注意溢出问题,如下图 :1000000000。那么又为好区分。那么可以用 下划线 _ 来解决。并且下划线不会被输出。
自动类型转换
低容量类型转高容量类型,就是自动类型转换。
从下面这一张图,可以发现,money 乘以 years 输出的值 溢出,int 的容量不够。后来用 long 来解决,可是发现还是不能正常输出 2000000000 的值,是因为默认已经是 int,即便是转换后也是一样存在问题。那么我们就把years 这个变量值转换为 long 。就可以解决这个问题了。
注意点拓展总结
我们在,运行项目,会出现下面这种情况。
1|Error:java:无效的源发行码
这是因为 jdk 的版本需要修改过来。
如何修改: file–>setting–>Build,Execution,Deployment–>compiler–>Java compiler
这样修改之后,就正常了。
compiler
[外链图片转存中…(img-Nhm5cDHD-1632541890121)]
这样修改之后,就正常了。