2021-01-07

Java基本数据类型及其转换关系

基本数据类型介绍

Java语言中,数据类型可以分为两大类:基本数据类型和引用数据类型,其中基本数据类型共包含八种具体类型:
2021-01-07_第1张图片
八种基本数据类型的内存占用以及取值范围:

类型 占用内存(字节) 取值范围(含边界值) 默认值
字节型(byte) 1 -128 ~ 127 0
短整型(short) 2 -32 768 ~ 32 767 0
整形(int ) 4 2 147 483 648 ~ 2 147 483 647 0
长整型(long) 8 -9 223 372 036 854 775 808L ~ 9 223 372 036 854 775 807L 0
单精度浮点型(float) 4 -3.40292347E+38-3.40292347E+38 0.0f
双精度浮点型(double) 8 -1.79769313486231570E+308-1.79769313486231570E+308 0.0d
字符型(char ) 2 ‘ \u0000 - u\ffff ’ ‘\u0000 ’
布尔型(boolean) 1 true 或 false false

基本数据类型间的转换

***小提示:基本数据类型中,boolean类型只有true和false两种取值,分别代表逻辑真和逻辑假。boolean类型具有特殊性,它不能与其他任何一种基本数据类型转换,因此数据类型转换仅针对其余7种类型。

基本数据类型间的转换可以分为两类:自动类型转换和强制类型转换。

自动类型转换

当将小取值范围类型的数据转换成大取值范围类型时发生的就是自动类型转换,这种情况下程序员不需要进行任何显示的操作,编译器会自动完成转换。
自动类型转换顺序:
byte、short、char—>int—>long—>float—>double
在eclipse编辑器中编写测试代码如下:

2021-01-07_第2张图片

在程序第9和第10行发生的类型转换均是从小取值范围到大取值范围,均为自动类型转换。

注意,在java中对于未声明类型的整形数据,其默认类型是int型;对于未声明类型的浮点型数据,其默认类型是double型。编写如下程序:

2021-01-07_第3张图片 我们发现,这里默认int类型数据转换为short没有出错,而默认double类型数据转换为float却出错了,这是为什么呢?

这是因为:java编译器在编译过程中,当将一个默认为int类型的数值赋给一个比int型数值范围小的类型变量(这里称其为数值类型k)时会进行判断,如果此int型数值超过数值类型k的取值范围,那么会直接编译出错。因为你将一个超过了范围的数值赋给类型为k的变量,k装不下,你又没有进行强制类型转换,所以报错了。但是如果此int型数值尚在数值类型k范围内,jvm会自定进行一次隐式类型转换,将此int型数值转换成类型k。

强制类型转换

当将大取值范围类型的数据转换成小取值范围类型时,就需要强制类型转换,要由程序员添加强制转换符号。如:

可以看出,将int类型数据直接转换为byte程序报错了,而加上强制转换符号就没问题了。

强制类型转换有可能精度丢失或数据溢出,上例中强制类型转换后变量a的结果为-106,就是由于数据溢出。

表达式类型自动提升

数据类型转换不仅会发生在赋值运算中,还有可能发生在表达式运算中。当运算表达式中各参数的类型不同时,各个参数会自动提升成表达式中取值范围最高的类型,再进行运算。最后运算的结果将会是表达式中取值范围最高的类型。如:

2021-01-07_第4张图片

在程序第四行,由于表达式中取值范围最大的数据类型为float类型,因此变量a、b会自动类型转换为float类型,再进行运算。最终程序的输出结果为38.25。

参考博客的地址
https://www.cnblogs.com/liujinhong/p/6005714.html
https://blog.csdn.net/sinat_39373192/article/details/86544668

你可能感兴趣的:(java基础,java,编程语言)