一、基本数据类型
1、8中基本数据类型
基本数据类型 | 包装类(全类名) | 大小(字节) | 范围 |
---|---|---|---|
byte | java.lang.Byte | 1 | -128(-2^7)~ 127(2^7-1) |
short | java.lang.Short | 2 | -32768(-2^15)~ 32767(2^15 - 1) |
int | java.lang.Integer | 4 | -2,147,483,648(-2^31)~ 2,147,483,647(2^31 - 1) |
long | java.lang. Long | 8 | -9,223,372,036,854,775,808(-2^63)~ 9,223,372,036,854,775,807(2^63 -1) |
float | java.lang.Float | 4 | 1.4e-45f ~ 3.4028235e+38f |
double | java.lang.Double | 8 | 4.9e-324 ~ 1.7976931348623157e+308 |
char | java.lang.Character | 2 | \u0000(十进制等效值为 0)~ \uffff(即为 65535) |
boolean | java.lang.Booean | 1或4 | true、false |
注意:除Character外,其他7个包装类,均继承了java.lang.Number类
2、使用注意事项
定义基本类型数据
// 使用大写L,而不是小写l,防止l与1混淆
long num = 0L;
// 定义浮点型数据,需要带上后缀f/F,防止出错
float count = 0.0f;
// 定义浮点型数据,需要带上后缀d/D,防止出错
double money = 0.0d;
// Java中表示二进制数据,以0b开头
int bin = 0b0001;
// Java中表示八进制数据,以0开头
int oct = 0342377;
// Java中表示十六进制数据,以0x开头
int hex = 0x123abc;
// Java中表示十进制数据,默认
// 字面常量数字的下划线,jdk7开始使用,便于阅读
int dec = 1_2_3;
注意:数据类型的自动转换,如,+=等会自动类型转换
3、缓存问题
- IntegerCache类,Byte、Short、Integer(缓存范围可变)、Long,范围-128 ~ 127
- Character范围0 ~ 127
4、装箱、拆箱
JDK1.5引入自动装箱(boxing)、拆箱(unboxing)机制。
- 基本类型到包装类,装箱:Integer.valueOf()
- 包装类到基本类型,拆箱:intValue()
二、引用数据类型
1、说明
引用类型 | 说明 |
---|---|
String | 不可变类,使用字节数组存储byte[] value |
class | 一切皆对象,每个类只会被加载一次 |
interface | 面向接口编程,多态 |
array | 内存连续,大小固定,随机访问,增删慢,查询快 |
2、string的使用
不可变类,字符串常量存储在字符串常量池中,目的是共享、无重复。
(1)字符串的创建
- 字面量方式:JVM先去字符串常量池(堆)找,有则使用,返回引用地址;无则创建,返回引用地址
- new关键字方式:JVM先去字符串常量池找,有就不需要创建,直接在堆中创建对象返回引用地址;无则创建,再在堆中创建后返回引用地址
- + 拼接变量字符串(语法糖):本质为StringBuilder的appen()方法,常量与常量拼接在常量池
String str1 = "a";
String str2 = str1 + "b"; // 原理如下:
// StringBuilder sb = new StringBuilder();
// sb.append("a");
// sb.append("b");
// sb.toString(); -> new String(),但不会在常量池中生成
(2)与其他数据类型转换
- string与字符数组的转换: toCharArray()、new String()
- string与基本数据类型、包装类的转换:String.valueOf()、Integer.parseInt()等
- string与字节数组的转换:getBytes()、new String()
- string与数组的转换:Arrays.toString()输出
(3)StringBuffer、StringBuilder
- StringBuffer:JDK1.0,可变字节序列,线程安全,效率低
- StringBuilder:JDK1.5,可变字节序列,线程不安全,效率高
- 以上二者初始大小均为16,动态扩容为原容量<<1+2,即容量*2+2
- 支持链式操作
(4)空串
- 空串:长度为0的字符串,有内存空间
- null:默认值,表示一个空对象,未分配内存空间
3、数组的使用
数组的声明方式
// 常用方式,定义有默认值,可后续赋值
int[] arr1 = new int[3];
// 直接初始化数组
int[] arr2 = {0,0,0};
// 常用于匿名的传递参数
int[] arr3 = new int[]{0,0,0};
4、Java是值传递
- 基本数据类型直接传递值
- 引用类型传递地址值