基本数据类型包含:
-
数值型:
整数类型: byte(1个字节)、short(2个字节)、int(4个字节)、long(8个字节)
浮点型: float(4个字节)、double(8个字节)
-
字符型: char(2个字节)
-
布尔型: boolean(1个字节或者4个字节)
整形
| 类型 | 占用存储空间 | 表数范围 |
|---|---|---|
| byte | 1字节 | -2^7 ~ 2^7 - 1 |
| short | 2字节 | -2^15 ~ 2^15 -1, 65536 |
| int | 4字节 | -2^31 ~ 2^31 - 1 约21亿 |
| long | 8字节 | -2^63 ~ 2^63 - 1 |
Java语言整形常量的四种表示形式
- 十进制整数, 如 99, -500, 0
- 八进制整数, 要求 以0开头,如:015
- 十六进制数,要求0x 或者 0X开头,如Ox15
- 二进制数,要求0b 或者 OB开头,如:0b01110011
public class TestInt {
public static void main(String[] args) {
int a = 100; // 十进制
int b = 015; // 八进制
int c = 0xff; // 十六进制
int d = 0b1001010101; // 二进制
byte e = 50;
short f = 300;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
int salary = 30000; // 整型常量默认类型是int
// int yearSalary = 3000000000; // 这是错误的,int最大可表示21亿。则需要把整形常量定义为long类型
long yearSalary = 30000000000000L; // 把整数常量定位为long类型
System.out.println(yearSalary);
}
}
浮点型(Floating Point Number)
| 类型 | 占用储存空间 | 表数范围 |
|---|---|---|
| float | 4字节 | -3.043E38 ~ 3.043E38 |
| double | 8字节 | -1.798E308 ~ 1.798E308 |
-
float 类型又称为单精度类型,尾数可以精确为7位有效数字
-
double表示这种类型的数值精度约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都采用double类型
-
Java浮点类型常量有两种表现形式 (1)十进制数形式: 例:3.14 314.0 0.314 (2)科学技术法形式:例:3.14e0 3.14E2
-
浮点数不精确,不要用于比较
浮点数存在舍入误差,数字不能精确表示。浮点数适合普通的科学和工程计算,精度足够,但不适合精度要求非常高的商业计算,这时候要使用BigDecimal进行运算和比较。
-
浮点常量默认类型是double, 要改成float可以后面加F或者f
public class TestFloatNumber {
public static void main(String[] args) {
double d1 = 3.14;
double d2 = 3.14E2; // 科学计数法
// float d3 = 1.65; // 错误写法,浮点常量默认类型是double, 改float需要后面加F
float d3 = 1.65F;
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
float f1 = 0.1F;
double d4 = 1.0/10;
System.out.println(f1 == d4); // false, 两个等号是比较, 尽量不要比较, 并不相等;
}
}
字符型
字符型的发展历史:
ASCII字符集表示了英文字母、数字、特殊字符、控制符,所有字符集的老祖宗。大家都会兼容它。用一个字节来表示一个字符,一个字节是2^8位,对应的值是256,则最多可以表示256个状态。
如下图:目前只用到了128个,后面的128个一直是空的。对于26个英文字母够用。
但对于其他文字就不够用了,于是有了ISO8859-1,包含了256个字符。前128个字符与ASCII中完全相同。后128个包含了西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。
随着我国计算机发展,汉字处理有了我们的方案,就是GB2312,两个字节表示一个汉字。两个字节可以表示65536个状态,汉字再多也能全部包含了。后来有了GBK、GB18030(56个民族语言)。
台湾地区也搞了一套显示繁体中文的大五码BIG5。
全世界各个地方,都有自己的文字编码。由于不互通,经常造成乱码问题。如果有一种统一的字符集,将世界上所有语言字符都纳入其中,每一个字符都给与一个全球独一无二的编码,那么乱码问题就会消失。于是全球所有国家和民族使用的所有语言字符的同一字符集诞生了,就是Unicode字符集。
Uicode字符集是为了给全世界所有字符一个唯一的编码。唯一对应英文Unique,而编码英文是code。
Unicode采用了字符集和编码分开的策略。Unicode之前,Unicode诞生之前可以将字符集和字符编码混为一谈,而在Unicode中必须严格区分开。
Uicode字符集统一采用两个字节表示一个字符,包含英文字母。但是,由于英文占用互联网信息绝大部分。真实存储和传输时,会造成极大的浪费;因此,目前主要采用UTF-8编码来实现具体的存储和传输。UTF-8是编长编码,用1-6个字符编码Unicode字符。西欧字符仍然是一个字节,汉字3个字节。
字符型在内存中占用2个字节,在JAVA中使用单引号来表示字符常量。例如‘A’是一个字符,它与“A”是不同的,“A”表示含有一个字符的字符串。
char 类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占用2个字节,可允许有65536个字符。
public class TestChar {
public static void main(String[] args) {
char c1 = 'a';
char c2 = '中';
char c3 = '\u0061';
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
// java 中字符串不是基本数据类型,而是一个类
String str = "我是中国人";
System.out.println(str);
// 转义字符
char c5 = '\n';
System.out.println("a\nb\nc\nd\ne\nf\ng");
}
}
Unicode 具有从0到65535之间的编码,他们通常从‘\u00000’到‘\uFFFF’之间的十六进制来表示(前缀为u表示Unicode)
char c = '\u0061';
转义字符
char c = '\n'
注意:String类,其实是字符序列,本质是char字符组成的数组。
布尔型(boolean)
-
boolean 类型有两个常量值, true 和 false。
-
在内存中占一个字节或者四个字节,不可以使用0 或者 非0的整数替代true 和 false,这点和C语言不同。
public class TestBoolean {
public static void main(String[] args) {
boolean b1 = true;
boolean b2 = false;
if (b1) {
System.out.println("b1是true");
} else {
System.out.println("b1是false");
}
}
}