Java基础精讲:第二篇(装箱拆箱到String优化)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值