Skip to content

数据类型

787字约3分钟

java

2024-10-24

数据类型

八种基本数据类型
类型大小示例取值范围
boolean1字节,8位truetrue、false
byte1字节,8位有符号数-100-128 ~ +127
short2字节,16位有符号数100-32768 ~ +32767
int4字节,32位有符号数150-2147483648 ~ + 2147483647
long8字节,64位有符号数1000019位10进制
char2字节,16位unicode字符'a'0 ~ 65535
float4字节,32位有符号数3.14f-3.4E38 ~ 3.4E38
double8字节,64位有符号数2.4e3d-1.7E308 ~ 1.7E308
float存储模式

float存储示意图

float 32字节,分为两部分(指数+位数)

int 10位,前两位为2或1,

long 19位10进制

char 支持各种字符,不支持字符串赋值,只支持单字符赋值

占2字节,只能存1个字符。可为中文,可使用数字赋值,当使用数字赋值时其表示数字所代表的ASCII码字符

String 非基本数据类型以双引号界定与char有区别。

Boolean型 不能直接和其他七种基本数据类型互转

小数据类型转大数据类型会产生精度损失或者数据溢出

例:

精度损失

数据类型的转换

image-20210826201510894

常量

常量(立即量):编译过程中就能确定的值

常量默认是int型,1234L表示long型常量

分类

数据类型举例表示
int123默认整数
long123LL大写小写均可要求大写
double3.14默认小数
float3.14f大写小写均可
String"字符串常量"
Booleantrue/false
Objectnull表示没有对象(null 是一种特殊的引用数据类型)

总结

image-20210826165012972

1.不会发生默认提升的情况:

byte byte1=23+1 => byte byte1=24;

寄存器优化,先计算23+1=24,再将24赋值给byte1。

byte++; / byte+=2;

以上情况发生寄存器优化不会发生默认提升现象。(short类似)

2.合理选择数据类型:

1.使用场景,用户需求。

2.合理的值域。

3.操作方便性。

注意:java/javax不能作为自己的包名

null 是一种特殊的引用数据类型

问题

这里书写今日所遇到问题及解决方法 不要忽略小问题,小问题也要记下来。( 勿以善小而不为 )

以下代码报错:

byte byte1=1;
byte byte2=127;
byte byte3=byte1+byte2;
/*报错信息如下*/
/*错误: 不兼容的类型: 从int转换到byte可能会有损失	byte byte3=byte1+byte2;*/

原因:小的数据类型(如byte、short、char)在运算过程中,会先转化成int,再进行运算

解决:

1.使用int型变量来接收结果

2.使用(byte)(byte1+byte2)将结果强制转换为byte(注意:当结果大于byte的表示范围是时会发生数据溢出)

尽量减少使用强制类型转换

例:

byte byte1=1;
byte byte2=127;
byte byte3=(byte)(byte1+byte2);
System.out.println(byte3);
/*输出结果如下:
D:\kaifamiao\Test>javac TestDateType.java

D:\kaifamiao\Test>java TestDateType
-128
*/

吐槽

这里是吐槽部分,内容不限。