★「任何人来干扰我做事 我都会停下和他玩一会」☆
学会了 老师
我是楼主
接口和抽象类的核心区别在于 设计意图:接口定义 "能力"(能做什么),抽象类定义 "本质"(是什么)。选择时,优先考虑是否需要成员变量/构造方法(用抽象类),是否需要多实现(用接口)。JDK 8 之后接口可以有默认实现,但无法改变"接口无状态"的本质,遵循"面向接口编程"原则,优先使用接口,必要时才用抽象类。
String str = new String("abc") 创建对象的数量取决于常量池状态:首次执行创建 2 个对象(常量池 1 + 堆 1),非首次执行只创建 1 个对象(仅堆中)。核心是理解字符串字面量的常量池机制和 new 关键字的堆对象创建机制,生产环境应优先使用字面量方式避免不必要的对象创建。
String 不可变、线程安全但拼接性能差;StringBuilder 可变、单线程性能最优;StringBuffer 可变、多线程安全但略有同步开销。实际开发中,单线程场景优先使用 StringBuilder,循环拼接必须避免使用 String 的 + 操作。
String 设计成 final 不可变类,是为了实现 常量池内存优化、天然线程安全、哈希值缓存、系统安全保障、设计一致性 五大核心价值。不可变性是 String 成为 Java 中最重要、最高频使用类的基础支撑,也是不可变对象设计模式的经典范例。