外观
数据类型
数据类型
八种基本数据类型
类型 | 大小 | 示例 | 取值范围 |
---|---|---|---|
boolean | 1字节,8位 | true | true、false |
byte | 1字节,8位有符号数 | -100 | -128 ~ +127 |
short | 2字节,16位有符号数 | 100 | -32768 ~ +32767 |
int | 4字节,32位有符号数 | 150 | -2147483648 ~ + 2147483647 |
long | 8字节,64位有符号数 | 10000 | 19位10进制 |
char | 2字节,16位unicode字符 | 'a' | 0 ~ 65535 |
float | 4字节,32位有符号数 | 3.14f | -3.4E38 ~ 3.4E38 |
double | 8字节,64位有符号数 | 2.4e3d | -1.7E308 ~ 1.7E308 |
float存储模式
float 32字节,分为两部分(指数+位数)
int 10位,前两位为2或1,
long 19位10进制
char 支持各种字符,不支持字符串赋值,只支持单字符赋值
占2字节,只能存1个字符。可为中文,可使用数字赋值,当使用数字赋值时其表示数字所代表的ASCII码字符
String 非基本数据类型以双引号界定与char有区别。
Boolean型 不能直接和其他七种基本数据类型互转
小数据类型转大数据类型会产生精度损失或者数据溢出
例:
数据类型的转换
常量
常量(立即量):编译过程中就能确定的值
常量默认是int型,1234L表示long型常量
分类
数据类型 | 举例 | 表示 |
---|---|---|
int | 123 | 默认整数 |
long | 123L | L大写小写均可要求大写 |
double | 3.14 | 默认小数 |
float | 3.14 | f大写小写均可 |
String | "字符串常量" | |
Boolean | true/false | |
Object | null | 表示没有对象(null 是一种特殊的引用数据类型) |
总结
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
*/
吐槽
这里是吐槽部分,内容不限。