1. 一个字符占用内存的大小
如果用下面代码去计算一个字符占用内存的大小,则会得出如下表格中的内容。
"啊".getBytes("UTF-8").length
字符编码 | a | aa | aaa | aaaa | 啊 | 啊啊 | 啊啊啊 | 啊啊啊啊 | 一个英文 | 一个中文 |
UTF-8 | 1 | 2 | 3 | 4 | 3 | 6 | 9 | 12 | 一字节 | 3字节 |
UTF-16 | 4 | 6 | 8 | 10 | 4 | 6 | 8 | 10 | n个字符:2n字节+2字节BOM头 | |
UTF-16BE | 2 | 4 | 6 | 8 | 2 | 4 | 6 | 8 | 一个字符2字节 | |
UTF-16LE | 2 | 4 | 6 | 8 | 2 | 4 | 6 | 8 | 一个字符2字节 | |
UTF-32 | 4 | 8 | 12 | 16 | 4 | 8 | 12 | 16 | n个字符:2n字节+2n字节BOM头 | |
UTF-32BE | 4 | 8 | 12 | 16 | 4 | 8 | 12 | 16 | n个字符:2n字节+2n字节BOM头 | |
UTF-32LE | 4 | 8 | 12 | 16 | 4 | 8 | 12 | 16 | n个字符:2n字节+2n字节BOM头 | |
UNICODE | 4 | 6 | 8 | 10 | 4 | 6 | 8 | 10 | n个字符:2n字节+2字节BOM头 | |
GBK | 1 | 2 | 3 | 4 | 2 | 4 | 6 | 8 | 1字节 | 2字节 |
GB2312 | 1 | 2 | 3 | 4 | 2 | 4 | 6 | 8 | 1字节 | 2字节 |
GB18030 | 1 | 2 | 3 | 4 | 2 | 4 | 6 | 8 | 1字节 | 2字节 |
ISO8859-1 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1字节 | 1字节 |
BIG5 | 1 | 2 | 3 | 4 | 2 | 4 | 6 | 8 | 1字节 | 2字节 |
ASCII | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1字节 | 1字节 |
单算字符占字节数,不算BOM头,总结如下:
UTF-8 | 不同字符会占1-4字节,一般来讲一个汉字占3字节,一个英文占1字节 | ||||||
UTF-16 | UTF-16BE | UTF-16LE | UTF-32 | UTF-32BE | UTF-32LE | UNICODE | 一个字符2字节 |
GBK | GB2312 | GB18030 | BIG5 | 一个英文1字节,一个汉字2字节 | |||
ASCII | ISO8859-1 | 一个字符1字节 |
2. 变量默认值
至顶部
参考:为什么局部变量需要显式设置初始化值
类的全局变量,没有赋初始值时,有默认值:
int:0 long:0 boolean:false float:0.0 double:0.0 char: \u0000(即NULL) String:null Object:null int[]:null |
静态方法使用全局变量时,没有默认值,必须初始化。
3. 八大基本数据类型取值范围,字节数
至顶部
1个字节是28,数字默认类型是int
参考:Java 基本数据类型
类型 | 范围 | 范围 | 个数 | 字节 | 默认值 |
---|---|---|---|---|---|
byte | -27 ~ 27-1 | -128 ~ 127 | 256 | 8位/1字节 | 0 |
short | -215 ~ 215-1 | -32768 ~ 32767 | 65536 | 16位/2字节 | 0 |
int | -231 ~ 231-1 | -2,147,483,648 ~ 2,147,483,647 | 4,294,967,296 | 32位/4字节 | 0 |
long | -263 ~ 263-1 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 1019左右,接近0.2垓 | 64位/8字节 | 0L |
float | 单精度 | 不能表示精确值 | 符合IEEE 754标准的浮点数 | 32位/4字节 | 0.0f |
double | 双精度 | 不能表示精确值 | 符合IEEE 754标准的浮点数 | 64位/8字节 | 0.0d |
boolean | true或者false | 1位 | false | ||
char | \u0000 ~ \uffff | 单一的 16 位 Unicode 字符 | 65536 | 2字节 | \u0000(NULL) |