6️⃣ Java 自动装箱与拆箱
📌 基本概念
装箱(Boxing): 自动将基本数据类型转换为对应的包装类对象
调用方法:Integer.valueOf(int)
拆箱(Unboxing): 自动将包装类对象转换为基本数据类型
调用方法:Integer.intValue()
📌 细节优化
对于 -128 ~ 127 的常用整数,JVM 会缓存对象(享元模式),提升性能
超出范围的整数、浮点数没有缓存,每次都会创建新对象
示例:
Integer a = 127;
Integer b = 127;
System.out.println(a == b); // true (缓存池)
Integer x = 128;
Integer y = 128;
System.out.println(x == y); // false (新对象)
⚠️ 注意:装箱/拆箱可能导致 NullPointerException,如:
Integer i = null;
int j = i; // ❌ 空指针异常
7️⃣ 重载(Overload)与重写(Override)的区别
对比点 重写(Override) 重载(Overload)
发生位置 父类与子类之间 同一个类中
方法名 必须相同 必须相同
参数列表 必须相同 必须不同(个数、类型或顺序不同)
返回类型 必须相同,或是父类返回类型的子类 无要求
访问修饰符 不能比父类更严格(public > protected > default > private) 无要求
异常 不能抛出比父类更宽泛的检查异常 无要求
多态性 运行时多态 编译时多态
✅ 示例代码:
重写:
class Animal {
public void sound() { System.out.println(“Animal sound”); }
}
class Dog extends Animal {
@Override
public void sound() { System.out.println(“Dog bark”); }
}
重载:
class MathUtil {
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
}
8️⃣ equals() 与 == 的区别
对比点 == equals()
比较内容 基本类型:比较值
引用类型:比较地址 默认比较地址,可被重写比较内容
用途 判断是否是同一个对象/同一值 判断两个对象的“内容”是否相等
可重写性 不可重写 可在类中重写(如 String、Integer)
示例:
String s1 = new String(“abc”);
String s2 = new String(“abc”);
System.out.println(s1 == s2); // false (不同对象)
System.out.println(s1.equals(s2)); // true (内容相等)
💡 建议:
比较对象内容优先使用 equals()
常量放前面,避免空指针:
if (“OK”.equals(status)) { … } // 推荐
9️⃣ hashCode() 的作用
📌 概念
hashCode() 返回对象的哈希值,用于快速定位对象存储位置
主要用于哈希表相关的集合,如 HashSet、HashMap
📌 规则
如果两个对象相等(equals() 返回 true),它们的 hashCode() 必须相等
如果两个对象 hashCode() 相等,它们不一定相等(可能发生哈希冲突)
📌 作用流程
先调用 hashCode() 定位桶
若存在冲突,再调用 equals() 精确比较
示例:
Set set = new HashSet<>();
set.add(“Java”);
set.add(“Java”); // 不会重复,因为hashCode+equals判断相等
🔟 String、StringBuffer、StringBuilder 的区别
对比项 String StringBuffer StringBuilder
可变性 不可变,每次操作生成新对象 可变 可变
线程安全性 线程安全(不可变天生安全) 线程安全(方法加锁) 非线程安全
性能 最慢(频繁创建对象) 较快(适用于多线程场景) 最快(适用于单线程场景)
示例:
String s = “Hello”;
s += " World"; // 产生新的 String 对象
StringBuffer sb = new StringBuffer(“Hello”);
sb.append(" World"); // 修改原对象
💡 建议:
字符串少量拼接:用 + 或 String.concat()
多次拼接(单线程):用 StringBuilder
多次拼接(多线程):用 StringBuffer
2464

被折叠的 条评论
为什么被折叠?



