2.2.5 浮点数(双精度)
- 注意事项
表示方式 | 所占空间 | 精度范围 |
---|---|---|
double | 8字节 | 精确到15-16位 |
- 案例分析
public class DataTypeTest05 {
public static void main(String[] args) {
//①: 声明一个double类型的变量
double num = 3.14;
System.out.println("double类型num的值是:"+num);
//②: 通过相除得到一个double类型的值
num = 10/3.0;
System.out.println(num);
}
}
- 结论
小数的数据类型通过double指定,占内存8个字节,能够代表的数的精度范围是15到16位;这里注意看上述代码的第二次赋值,此时num=10/3.0得到的结果是3.33….35,这里要注意一点,Java中通过double存储的小数本身是存在问题的。如果对于数据的精确到要求较高,或者可能做一些货币计算,那么推荐大家使用BigDecimal。
2.2.6 浮点数(单精度)
- 注意事项
表示方式 | 所占空间 | 精度范围 |
---|---|---|
float | 4字节 | 精确到6-7位 |
- 案例分析
public class DataTypeTest06 {
public static void main(String[] args) {
//①: 声明一个float类型的变量
float num = 3.14;
System.out.println("float类型num的值是:"+num);
}
}
- 结论
这里要千万注意,默认情况下在Java中所有的小数的默认类型是double类型,所以当给float赋值时,本身赋值的数是double类型;编译器觉得赋值的右边是double类型而左边是float类型,所以报错Type mismatch: cannot convert from double to float。
解决办法: 在小数字面值的后面加"F"(推荐)或者是"f"。
public class DataTypeTest06 {
public static void main(String[] args) {
//①: 声明一个float类型的变量
float num = 3.14F;
System.out.println("float类型num的值是:"+num);
}
}
2.2.7 字符型
- 注意事项
表示方式 | 所占空间 |
---|---|
char | 2字节 |
- 案例分析1
public class DataTypeTest07 {
public static void main(String[] args) {
//声明一个char类型的变量
char ch = '薛';
System.out.println("char类型的变量ch是:"+ch);
}
}
- 结论1
这里要千万注意,char类型的变量赋值的时候,需要通过单引号引起来的单个字符。注意不能是0个也不能是多个,更不能是双引号。PS:双引号引起来的是字符串,是一组字符序列。通过String类型去指定。
- 常见报错信息
编写方式 | 报错信息 |
---|---|
char ch = 'ab'; | Invalid character constant 无效的字符常量 |
char ch = ''; | Invalid character constant 无效的字符常量 |
char ch = "a"; | Type mismatch: cannot convert from String to char 类型不匹配,无法将字符转为字符 |
- 案例分析2
我们之前带大家分析过,Java采用的是Unicode字符集合,所以对于字符类型的数值而言,除了通过单引号赋值单个字符之外还可以通过转义字符和Unicode的值来进行赋值操作。
- 通过转义字符赋值
注意看红色区域,对于某些字符是可以通过
\字符
这样的方式进行赋值操作的。比如:
什么是转义字符?
在Java中,通过
\
对于原本的字符的含义让其发生改变,我们称之为转义字符。
举例
public class DataTypeTest06 {
public static void main(String[] args) {
char ch1 = 't';
System.out.println("字符ch1的值是:"+ch1);
char ch2 = '\t';
System.out.println("字符ch2的值是:"+ch2+"。");
}
}
输出
字符ch1的值是:t
字符ch2的值是: 。
常见转义字符以及含义
转义字符 | 说明 | 代码示例 | 显示 |
---|---|---|---|
\b | 退格 | System.out.println("我是\b退格"); | 我是退格,会划分成两个词 |
\n | 换行符 | System.out.println("我是\n换行"); | 我是换行 |
\r | 回车符 | System.out.println("我是\r回车符"); | 我是<br />回车符 |
\t | 制表符 | System.out.println("我是\t回车符"); | 我是 制表符 |
\ " | 双引号 | System.out.println("我是\ "双引号"); | 我是"双引号 |
\ ' | 单引号 | System.out.println("我是\ ''单引号"); | 我是’单引号 |
\ \ | 反斜杠 | System.out.println("我是\ \单引号"); | 我是\单引号 |
- 案例分析3
public class DataTypeTest07 {
public static void main(String[] args) {
//通过Unicode值来给字符类型赋值以\u开头后跟十六进制数
char ch = '\u0021';
System.out.println("字符ch2的值是:"+ch+"。");
}
}
- 输出
字符ch2的值是:!
- 总结
根据上面ascii表中罗列的十进制的数,可以通过\u
后跟一个16进制
的数,表示一个字符的数值。比如!
显示的十进制的数是33
,转为16进制是0021
,所以通过\u0021
显示的就是!
。
案例分析4
根据上面的ascii表中的内容,我们发现所有的字符其实在计算机中存储的都是对应的十进制转换为的二进制的数据,也就意味着字符会对应的2个字节的正整数
[0,65535]
;
public class DataTypeTest08 {
public static void main(String[] args) {
//对于字符a进行简单的+1操作查看结果
char ch = 'a';
System.out.println("字符ch的值是:"+(ch+1));
}
}
- 总结
char类型字符,是可以参与四则运算的,相当于一个16位的无符号整数,表示数的范围是[0,65535]。
2.2.1 逻辑型
- 注意事项
表示方式 | 表示逻辑 | 所占空间 |
---|---|---|
逻辑型(boolean) | true(真)或者 false(假) | 1位 |
- 案例分析
public class DataTypeTest09{
public static void main(String[] args){
//1:声明一个boolean类型的变量
boolean flag = true;
System.out.println("boolean类型的变量flag的值是:"+flag);
//改变flag的值
flag = false;
System.out.println("boolean类型的变量flag的值是:"+flag);
}
}
- 结论
逻辑型boolean所占空间是1位
,只存在两个值,要么为true
,要么为false
。注意在Java中不能使用0
,1
代表;并且其它的基本数据类型是无法转换成为boolean类型的。
强调一点,boolean类型的变量实际在内存中所占的空间是8位,一个字节。这个是大多数计算机实际的存储的方式。