文章目录
基本语法
1 编译和解释共存
2 数据类型
基本类型 | 位数 | 字节 | 默认值 |
---|---|---|---|
boolean | 1 | false | |
byte | 8 | 1 | 0 |
char | 16 | 2 | ‘u0000’ |
short | 16 | 2 | 0 |
int | 32 | 4 | 0 |
long | 64 | 8 | 0L |
float | 32 | 4 | 0f |
double | 64 | 8 | 0d |
装箱:将基本类型用它们对应的引用类型包装起来
拆箱:将包装类型转换为基本数据类型
2.1 常量池技术
Byte, Short, Integer, Long默认创建了-128127的缓存数据,Character创建了0127的缓存数据
// 使用常量池中的对象,Integer i1 = Integer.valueOf(40);
Integer i1 = 40;
// 创建新的对象
Integer i2 = new Integer(40);
// Integer没有+操作符,会自动拆箱
Integer i3 = new Integer(40);
Integer i4 = new Integer(40);
Integer i5 = new Integer(0);
i3 == i4 + i5 // true
3 String
String:内部使用final关键字修饰字符数组保存字符串,不可变
StringBuilder:可变字符串
StringBuffer:可变字符串,增加了同步锁,线程安全
4 ==和equals()的区别
==:用于比较两个对象地址是否相等,对于基本类型,比较的就是值,对于引用类型,比较的是地址
equals:用于判断两个对象是否相等,继承于Object类的equals方法,在Object类中equals方法使用的就是==,所以一些子类需要覆盖重写equals方法用于比较对象内容
5 equals()和hashCode()
为什么需要计算哈希值:把对象加入HashSet时,会先计算哈希值判断是否存在该对象,如果存在再通过equals方法判断是否相等
为什么重写equals方法时必须重写hashCode方法:如果两个对象相等(equals返回值相同),则哈希值一定是相等的;但如果两个对象哈希值相同,两个对象不一定相等
6 Java的值传递
在Java中只有值传递,只是引用对象传递的值是对象的地址,所以看起来像是引用传递
所以,在函数中改变对象的属性时,改变的是对应地址上的对象的属性,是可以改变的
但,在函数中直接改变对象,改变的是形参指向的地址,所以原对象是无法改变的
7 深拷贝和浅拷贝
- 浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝
- 深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容
所以对象变量间的赋值会造成两个对象变量指向同一个地址
8 重载和重写
- 重载:同样的一个方法能够根据输入参数的不同,做出不同的处理
- 重写:子类继承自父类的相同方法,重新改写,构造方法不可重写
9 序列化
序列化可以将对象转换为流,用于存储在本地,实现Serializable接口
transient关键字修饰的变量不会被持久化