1. Java中的数据类型
- 基本数据类型:整型、浮点型、布尔型、字符型
- 引用数据类型:类、接口、数组等
整型:byte, short, int, long
浮点型:float, double
布尔:boolean
字符:char
引用数据类型之字符串,字符编码 Unicode字符序列
1.1 八种基本类型
Variable | Wrapper Class | byte | 值域(二进制) | 值域 | 备注 |
---|---|---|---|---|---|
byte | Byte | 1 | -2^7 ~ 2^7-1 | -128 ~ 127 | |
boolean | Boolean | 1 | true / false | ||
char | Character | 2 | 0 ~ 65535 | Unicode 字符集 | |
short | Short | 2 | -2^15 ~ 2^15-1 | -32768 ~ 32767 | |
int | Integer | 4 | -2^31 ~ 2^31-1 | 21亿+ (2147483647) | 整数类型的缺省类型 |
float | Float | 4 | +/-3.4E+38F(6~7 个有效位) | 精度 + 值域 | |
long | Long | 8 | -2^63 ~ 2^63-1 | 9223372036854775807 | 19位数字 |
double | Double | 8 | +/-1.8E+308 (15 个有效位) | 浮点数的缺省类型,double精度是float的两倍 |
计算机中单位 bit
, 文件大小单位 byte
byte
是计算机中基本的衡量存储的单位
浮点数采用科学计数法表示
例如:2E3 等价 2 * 10^3
double d = 2E3;
float f = 2E3F;
1.2 字符
- ASCII编码
- 为英文字符设定了统一并且唯一的二进制编码(服务于英文)
- Unicode编码(万国码)
- 为每种语言中的每个字符设定了统一并且唯一的二进制编码(服务于所有国家的所有语种的所有字符)
- 可以跨语言、跨平台
Unicode 中每个字符都对应一个二进制正数,可以使用多种方式赋值
字符赋值、整数赋值、进制赋值
// 字符赋值
char c1 = 'A';
// 整数赋值(十进制)
// 整数类型赋值给字符类型,会找该整数对应的字符
char c2 = 65;
// 进制赋值
// \u 表示十六进制的 Unicode 编码,十六进制的 0041 是 65
char c3 = '\u0041';
// A, A, A
System.out.println(c1 + ", " + c2 + ", "+ c3);
1.3 转义字符
转义字符 | 描述 |
---|---|
\n | 换行 |
\t | 制表符 |
\ | 反斜线 |
' | 单引号 |
" | 双引号 |
System.out.println("Hello\tWorld");
System.out.println("Hello\nWorld");
2. 包装类
- 基本类型所对应的引用数据类型
- 包装类的默认值是 null
2.1 装箱拆箱
int num = 10;
// 装箱
Integer integer = new Integer(num);
Integer integer1 = Integer.valueOf(num);
// 拆箱
int inum = integer.intValue();
// JDK 1.5 之后自动装箱和拆箱
Integer inte = num;
int i = inte;
2.2 类型转换
int 与 String 互转
int num = 14;
String s = Integer.toString(num);
/*
Integer.toString(int i, int radix)
radix 基数,即:进制
*/
String s1 = Integer.toString(num, 16);
String s2 = Integer.toHexString(num);
String s3 = Integer.toOctalString(num);
int i = Integer.parseInt(s);
boolean 转 String
只要非 true, 全部都是 false
boolean b1 = Boolean.parseBoolean("true");
boolean b2 = Boolean.parseBoolean("false");
boolean b3 = Boolean.parseBoolean("0");
boolean b4 = Boolean.parseBoolean("1");
// b1=true; b2=false; b3=false; b4=false
System.out.println("b1=" +b1 + "; b2=" + b2 + "; b3=" + b3 + "; b4=" + b4);
2.3 Integer 缓冲区
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
System.out.println(integer1 == integer2); // false
// 自动装箱
Integer integer3 = 100;
Integer integer4 = 100;
System.out.println(integer3 == integer4); // true
反编译文件
Integer integer3 = Integer.valueOf(100);
Integer integer4 = Integer.valueOf(100);
Integer integer3 = 100; 等价 Integer.valueOf(100);
查看源码
private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[];
static {
// high value may be configured by property
int h = 127;
high = h;
cache = new Integer[(high - low) + 1];
}
}
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
整数缓冲区
Java 预先创建了 256 个常用的整数包装类型对象
在实际应用当中,对已创建的对象进行复用
网友评论