一,数据类型
Java是一种强类型
语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共有8种基本类型
(primitive type),其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。
1.1整型
- 整型用于表示没有小数部分的数值,它允许是负数。Java提供了4种整型,如下表
名称 | 类型 | 存储需求 | 数值范围 |
---|---|---|---|
字节型 | byte | 1字节 | -128~127 |
短整型 | short | 2字节 | -32769~32767 |
整型 | int | 4字节 | -2 147 483 648~2 147483647(正好超过20亿) |
长整型 | long | 8字节 | -9 223 372 036 854 775 808~9 223 372 036 854 775 807 |
- 程序中整数数值默认是int类型,如果要书写long类型,数值后加一个后缀L或l(如4000000000L),大小写均可
- 从Java 7开始,加上前缀0b或0B就可以写二进制数。例如,
0b1001
就是9。另外,同样是从Java 7开始,还可以为数字字面量加下划线,如用1_000_000
表示一百万。这些下划线只是为一r让人更易读。Java编译器会去除这些下划线门
1.2浮点类型
- 浮点类型用于表示有小数部分的数值。在Java中有两种浮点类型,如表
名称 | 类型 | 存储需求 | 数值范围 |
---|---|---|---|
单精度 | float | 4字节 | 1.4E-45 ~ 3.4E+38, -1.4E-45 ~ -3.4E+38 |
双精度 | double | 8字节 | -1.7E+308~1.7E+308 |
- double表示这种类型的数值精度是float类型的两倍(有人称之为双精度数值)。绝大部分应用程序都采用double类型。
- float类型的数值有一个后缀F或f(例如,3.14F)。
- 无后缀默认为double型(double型尾部可加D或d,也可省略)
演示
package c01.s01.p01;
/**
* 功能:数据类型取值范围
* 作者:沐虫贝
* 日期:2022年12月24日
*/
public class Example01 {
public static void main(String[] args) {
// 数值型变量(最大值)
byte a = 127;
short b = 32767;
int c = 2147483647;
long d = 9223372036854775807L;
float e = 3.4028235E38f;
double f = 1.7976931348623157E308;
System.out.println(a + " " + b + " " + c + " " + d + " " + e + " " + f);
//取值范围
System.out.println("Byte.MIN_VALUE = " + Byte.MIN_VALUE);
System.out.println("Byte.MAX_VALUE = " + Byte.MAX_VALUE);
System.out.println("Short.MIN_VALUE = " + Short.MIN_VALUE);
System.out.println("Short.MAX_VALUE = " + Short.MAX_VALUE);
System.out.println("Integer.MIN_VALUE = " + Integer.MIN_VALUE);
System.out.println("Integer.MAX_VALUE = " + Integer.MAX_VALUE);
System.out.println("Long.MIN_VALUE = " + Long.MIN_VALUE);
System.out.println("Long.MAX_VALUE = " + Long.MAX_VALUE);
System.out.println("Float.MIN_VALUE = " + Float.MIN_VALUE);
System.out.println("Float.MAX_VALUE = " + Float.MAX_VALUE);
System.out.println("Double.MIN_VALUE = " + Double.MIN_VALUE);
System.out.println("Double.MAX_VALUE = " + Double.MAX_VALUE);
}
}
结果如图
1.3布尔类型
- boolean(布尔)类型有两个值:
false
和true
,用来判定逻辑条件。整型值和布尔值之间不能进行相互转换。 - 布尔型占用空间取决于Java虚拟机(JVM)
1.4字符型
- 字符型(char)用来存储如字母,数字,标点符号及其他单引号引起来的单个unicode字符。需用
' '
(单引号)引起来 - 字符型在内存中占两个字节,取值范围为0~65535,对应ASCII码.
1.5转义字符
转义字符 | 含义 |
---|---|
\ddd | 表示1~3位8进制数据所表示的字符 |
\uxxxx | 表示1~4位16进制数据所表示的字符 |
\ " | 表示双引号 |
\ ’ | 表示单引号 |
\ | 表示反斜杠 |
\r | 表示回车 |
\n | 表示换行 |
\f | 表示走纸跳页 |
\t | 表示横向跳格 |
\b | 表示退格 |
演示
package c01.s01.p01;
/**
* 功能:转义字符
* 作者:沐虫贝
* 日期:2022年12月24日
*/
public class Example02 {
public static void main(String[] args) {
char c1 = 'a'; // 字符型变量
char c2 = 'A';
char c3 = '\r';// 保存的是回车符
char c4 = '\'';// 保存的是单引号字符
char c5 = '\u0041'; //保存的是字符A,A的unicode编码是65
int c1asc = c1;
int c2asc = c2;
int c3asc = c3;
int c4asc = c4;
int c5asc = c5;
System.out.println(c1 + "的ASCII:" + c1asc);
System.out.println(c2 + "的ASCII:" + c2asc);
System.out.println(c3 + "的ASCII:" + c3asc);
System.out.println(c4 + "的ASCII:" + c4asc);
System.out.println(c5 + "的ASCII:" + c5asc);
// 转义字符
System.out.println("你好呀!\n你好你好!");
System.out.println("你\t\t我\t他");
System.out.println("你\t我\b他");
}
}
效果
二,数据类型转换
2.1自动类型转换
- 自动类型转换是指从低级到高级由编译器自动完成的类型转换,不需要在程序中编写代码。
2.2强制类型转换
- 强制类型转换的语法格式是在
圆括号
中给出想要转换的目标类型,后面紧跟待转换的变量名
。
例如:
double x = 9.997;
int nx=(int) x;
这样,变量nx的值为9。强制类型转换通过截断小数部分将浮点值转换为整型。如果想对浮点数进行舍人运算,以便得到最接近的整数(在很多情况下,这种操作更有用),那就需要使用Math.round
方法:
double x=9.997;
int nx=(int) Math.round(x);
现在,变量nx的值为10。当调用round的时候,仍然需要使用强制类型(int)。其原因是round方法返回的结果为long类型,由于存在信息丢失的可能性,所以只有使用显式的强制类型转换才能够将long类型转换成int类型。
演示
package c01.s01.p01;
/**
* 功能:强制类型转换
* 作者:沐虫贝
* 日期:2022年12月24日
*/
public class Example03 {
public static void main(String[] args) {
double x = 9.997;
int i = 65;
char c1 =(char)i;//把65看为字符,对应的是A
char c2 ='刘';
int nx =(int)x;//强制转换为整型
int xx =(int)Math.round(x);//舍入运算,强制转换
System.out.println("c1="+c1);
System.out.println("c2的unicode码是:"+(int)c2);//字符型强制转换为整型
System.out.println("nx="+nx);
System.out.println("xx="+xx);
System.out.println((byte)1000);//溢出,转换不准确,变成-24
}
}
结果