本文最后更新于512 天前,其中的信息可能已经过时,如有错误请发送邮件到mapleleaf2333@gmail.com
本文主要用于记录常见的Java基础知识的细节问题,会不断更新。
包装类型
基础类型之间==比较的是值,而包装类型之间==比较的是两个对象的内存地址,需要通过.equal来比较值
基本数据类型的包装类型都通过缓存机制来提升性能,Byte
,Short
,Integer
,Long
这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character
创建了数值在 [0,127] 范围的缓存数据,Boolean
直接返回 True
or False
。以Integer为例:public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
private static class IntegerCache {
static final int low = -128;
static final int high;
static {
// high value may be configured by property
int h = 127;
}
}
深拷贝浅拷
对象
==
对于基本类型和引用类型的作用效果是不同的:
- 对于基本数据类型来说,
==
比较的是值。 - 对于引用数据类型来说,
==
比较的是对象的内存地址。
String
中的 equals
方法是被重写过的,因为 Object
的 equals
方法是比较的对象的内存地址,而 String
的 equals
方法比较的是对象的值。
hashCode()
获取哈希码,确认对象在哈希表中的位置。