四、数据类型
1.Java的数据存储规范
Java是强类型语言:要求数据的类型与数据的值严格保持一致
2.Java的数据类型分类(两大类)
1.简单类型/基本类型/原始类型
①整数类型
数据类型 | 字节数 | 可表示的数据范围(二进制) | 可表示的数据范围(十进制) |
---|---|---|---|
byte | 1B | -2 7~27-1 | -128~127 |
short | 2B | -215~215-1 | -32768~32767 |
int | 4B | -231~231-1 | -2147483648~2147483647 |
long | 8B | -263~263-1 | -9223372036854775808~9223372036854775807 |
提示:
一个字节在二进制占8位;表示数据的时候,第一位为符号位,0代表正数,1代表负数。
②小数/浮点数类型
数据类型 | 字节数 | 负数取值范围(十进制) | 整数取值范围(十进制) | 精度 |
---|---|---|---|---|
float | 4B | -3.4E+38~1.4E-45 | 1.4E-45~3.4E+38 | 7位 |
double | 8B | -1.7E+308~4.9E-324 | 4.9E-324~1.7E+308 | 15位 |
提示:
-3.4E+38表示为-3.4乘以10的38次方分之一
③字符类型
数据类型 | 字节数 | 取值范围(无符号数) | 字符编码 |
---|---|---|---|
char | 2B | 0 ~ 65535 | Unicode(万国码) |
字符表示的三种方式:
Ⅰ.使用单引号引起来表示一个字符。如:‘a’,'b’等
Ⅱ.使用整数表示一个字符。如:char A=64,char a=96
Ⅲ.使用unicode去表示一个字符。如:char c = ‘\u0041’; 字符的默认值
常见的ASCII码:
‘a’ 97
‘A’ 65
‘0’ 48
转义字符:
\t | 水平跳格 |
---|---|
\n | 换行 |
\’ | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
④布尔类型
数据类型 | 字节数 | 取值范围 |
---|---|---|
boolean | 1B | true/false |
注意:
1. 整数默认是int类型
2. 浮点数默认是double类型
3. 长整型后缀用L或者l标记,建议用使用L(在定义数据类型,给的初始化值如果是整数,默认初始化值是int类型、小数默认是double,但是如果初始化值小于int类型数值范围,不加L也可以。但是建议加L,以便区分)
4. 单精度浮点数用F或者f标记。建议使用F(如果不加,会报错;因为初始化值是double类型,而a是float类型,从double转换到float可能会有损失)
5. float类型使用科学计数法储存的,可存储的范围过大,但是不够精确,小数点之后7位是精确的。
6. double类型使用科学计数法存储的,可存储的范围过大,但是不够精确,小数点之后15位是精确的,16位是否精确还不确定。
2.引用类型/对象类型
类、字符串、接口、数组等等,除了八种基本数据类型之外其他都是引用类型/对象类型
3.数据类型转换
1.默认转换(自动类型提升)
默认转换就是从小到大的转换
条件:
①两种数据之间必须能够相互兼容
②目标数据类型比源数据类型大
规则:
byte–>short–>int–>long–>float–>double
byte,short,char相互之间不能转换,它们参与运算首先转换为int类型
不同数据类型变量参与运算图解
2.强制类型转换
强制类型转换就是从大到小的转换
条件:
①两种数据之间必须相互兼容
②目标数据类型比源数据类型小
语法:
目标数据类型 变量名 = (目标数据类型)源数据变量名/源数据值;
注意:
Ⅰ.整数的长度相互匹配,直接赋值,数据是完整的
Ⅱ.整数的长度不匹配,数据截断,舍弃高位
Ⅲ.浮点数转整数,数据截断,舍弃小数位
Ⅳ.布尔类型数据不参与转换
Ⅴ.不要随意去使用强制类型转换,因为它隐含了精度损失问题
3.数据类型参与运算规则
进行算数运算时:
两个操作数有一个为double,计算结果提升为double。
如果操作数中没有double,有一个为float,计算结果提升为float。
如果操作数中没有float,有一个long,计算结果提升为long。
如果操作数中没有long,有一个为int,计算结果提升为int。
如果操作数中没有int,均为short或byte,计算结果仍旧提升为int。
特殊:任何类型与String相加(+)时,实为拼接,其结果自动提升为String。
4.数据类型中补充的几个小问题
1.byte,short在定义的时候,他们接受的其实是一个int类型的值,这个是自己做了一个数据检查的,如果不在它们的范围内,就报错
2、byte值的问题
byte b1 = 127;
byte b2 = (byte)128;//-128
byte b3 = (byte)129; //-127
byte b3 = (byte)130; //-126
byte的范围:-128 ~ 127
128:10000000
-128:10000000(这里的1即是符号位。也是数值位)
3.数据类型转换之默认转换
byte,short,char -- int -- long -- float -- double
long:8个字节
float:4个字节
A:它们底层的存储结构不同
B:float表示的数据范围比long的范围更大
long:2^63-1
float:3.4*10^38 > 2*10^38>2*8^38 = 2*2^3^38 = 2*2^114>2^63-1
4.Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
可以。因为Java语言中的字符占用两个字节;Java语言采用的是Unicode编码
上一篇: Linux下彻底删除MySQL
下一篇: Loading class com.mysql.jdbc.Driver . This is deprecated. The new driver class is com.mysql.cj.jdb
推荐阅读
-
四、数据类型
-
JavaScript学习笔记(四)【数据类型】
-
Perl(四)基本的数据类型
-
Python中的四种数据类型的操作
-
srt学习笔记四:srs支持srt 博客分类: ffmpeg ffmpeg
-
Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理 Java设计模式DesignPattern代理模式proxy模式
-
MongoDB最简单的入门教程之四:使用Spring Boot操作MongoDB 数据库mongoDBSpringBoot
-
http协议_数据类型(Content-Type,Accept)
-
JAVA工具【四】AESUtils加密工具
-
java数据类型转换以及部分常用快捷键