02Java中的数据类型
Java是一种强类型语言,这说明在声明变量的时候必须为变量指定数据类型。Java中共有8种基本数据类型,分别是4种整型、2种浮点型、1种字符类型和一种表示真实的布尔类型(boolean)
整型
整型用于表示没有小数部分的数值,例如:1、2、3等自然数,可以是负数。Java中提供了4种整型类型:

由于4种整型类型所占用的空间不同,因此它们的取值范围也不同。byte的取值范围最小,long的取值范围最大。通常情况下,int类型最常用的整型。整型还有一些需要注意的点:
- 如果想表示一个整数是长整型(long)数值,则需要在这个整数后面加一个后缀(L或l),如 40000L
- 如果想表示一个十六进制的整型数值,则需要加前缀0x,例如 0xa12d
- 如果想表示一个八进制的整型数值,则需要加前缀0,例如八进制010,表示的就是十进制的8
- 如果想表示一个二进制的整型数值,则需要加前缀0b,例如0b100
- 从Java7开始,数字字面量可以加下划线,让程序更易读,例如 1_000和1000表示的都是1000。Java在编译时,会自动去除这些下划线
/**
* 测试整型数据类型
*/
public class IntegerDemo {
public static void main(String[] args) {
//1.定义一个byte类型的整型变量
byte b = 1;
//2.定义一个short类型的整型变量
short s = 2;
//3.定义一个int类型的整型变量
int i1 = 3;
//4.定义一个long类型的整型变量,需要在数值后面加上L或l
long l = 4000000000L;
//5.定义一个二进制整型变量,需要在数值前面加上0b
int i2 = 0b10;
//6.定义一个八进制整型变量,需要在数值前面加上0
int i3 = 010;
//7.定义一个十六进制整型变量,需要在数值前面加上0x
int i4 = 0x10;
//8.Java7以后可以使用下划线来分隔数字
long l2 = 1_000_000_000_000L;
}
}
浮点型
浮点型用于表示有小数部分的数值,例如3.14。在Java中有两种浮点类型,分别是double型和float型

double表示的浮点数精度(有效数为15位)是float表示的精度(有效数是6~7位)的两倍,因此可以称double类型为双精度数,float为单精度数。在Java语言中,浮点数默认是double类型。所以,如果想表示你定义的浮点数是float类型,需要在浮点数的后缀加上F,例如3.14F。没有后缀F的浮点数值,总是默认为double类型。
另外需要注意的是,直接对浮点数进行计算可能会出现精度误差。例如,命令System.out.println(2.0-1.1),打印出来的结果不是0.9,而是0.8999999999999999。这种精度误差是由于计算机中,浮点数是采用二进制的形式进行存储。而二进制系统,有时是无法准确的表示小数的,因此会出现精度误差。如果想要进行没有误差的高精度计算,Java中也提供了相应的类去进行,精度有保证的浮点数计算,例如BigDecimal类。
/**
* 测试浮点型型数据类型
*/
public class DoubleDemo {
public static void main(String[] args) {
//1.定义一个double类型的浮点型变量
double d = 3.14;
//2.定义一个float类型的浮点型变量,需要在数值后面加上F或f
float f = 3.14f;
//3.直接对浮点数进行算术运算,可能会出现精度误差
System.out.println(2.0-1.1); // 0.8999999999999999
}
}
char型
Java中char类型表示字符,char类型的字面量需要用单引号包裹起来,例如 char c = ‘A’。
其中,也可以通过字符在Unicode编码表中对应的编码数值,来表示一个字符。例如,在Unicode编码表中第66个字符对应的是英文字母B,那么 char c = 66,在控制台中输出的结果就B。char类型的值还可以表示为\u+16进制值的形式,其范围在\u0000到\uFFFF之间。上述示例中的char c = 66,与char c = “\u0042″输出的字符结果是一样的。只不过66是十进制表示,0x0042是十六进制表示。除了转义序列\u之外,还有一些表示特殊字符的转义序列,如下图:

转义字符的用法:
System.out.println('\'') \\ 输出 '
通过上述代码,可以在控制台中输出一个单引号,而如果不使用转义字符,例如下方的语句,就是一句错误语法:
System.out.println(''') \\ 错误语法
其它需要注意的点:
1.所有的转义序列都可以出现在加引号的字符字面量或字符串中,java遇到这些特殊的转义序列会自动进行转义,将其输出为想要转义的状态。例如,在字符串中遇到\n,java就会执行换行
2.\u转义序列,可以出现在加引号的字符串常量或字符串以外,而其它转义序列是不可以的
public static void main(String\u005B \u005D args) \\这是一句正确的语法
因为\u005B 和\u005D分别是[和]的编码。Java遇到\u转义序列,就会将其先提前进行转义,再去执行代码。因此,Java实际执行的还是String[]。
/**
* 测试字符型数据类型
*/
public class CharDemo {
public static void main(String[] args) {
//1.定义一个char类型的变量
char c1 = 'A';
System.out.println(c1); // A
//2.定义一个char类型的变量,但是通过数值来表示
char c2 = 66;
System.out.println(c2); // B
//3.定义一个char类型的变量,但是通过转义字符来表示: \\u+Unicode编码
char c3 = '\u0042';
System.out.println(c3); // B
//4.具有特殊含义的转义字符,输出一个单引号
System.out.println('\''); // '
//5.具有特殊含义的转义字符,输出一个双引号
System.out.println('\"'); // "
}
}
boolean类型
Java中的布尔类型只有有两个值,分别是true和false,用来判定逻辑条件。在有些语言中,例如C++或C语言中,可以使用0代表布尔值false,非0值代表true,在Java中是不行的。
/**
* 测试boolean类型
*/
public class BooleanDemo {
public static void main(String[] args) {
//1.定义一个值为true的布尔类型变量
boolean b1 = true;
//2.定义一个值为false的布尔类型变量
boolean b2 = false;
}
}