-
Java集合判断对象相等需同时重写equals()和hashCode(),因先用hashCode()定位桶再用equals()确认;若只重写equals(),逻辑相等的对象可能被散列到不同桶,导致重复添加、查找失败等问题。
-
Executors类提供创建线程池的静态方法:newFixedThreadPool创建固定大小线程池,适用于稳定负载;newCachedThreadPool创建可缓存线程池,适合短期异步任务;newSingleThreadExecutor创建单线程池,保证任务顺序执行;newScheduledThreadPool和newSingleThreadScheduledExecutor分别用于定时及周期性任务调度。
-
类的依赖关系指一个类使用另一个类的功能,如通过参数、成员变量或实例创建;耦合度衡量这种依赖的紧密程度,高耦合导致代码难以维护和扩展。应通过接口编程、依赖注入和依赖倒置原则降低耦合,使类依赖抽象而非具体实现,提升可测试性与灵活性。
-
while循环不执行是因为初始条件为false;常见原因包括变量未初始化、逻辑错误、误用赋值符=代替==,以及字符串判空方式不当;循环内未更新控制变量则导致死循环。
-
PrintWriter默认不自动刷新缓冲区,需构造时传true或手动flush();不指定字符集易致中文乱码;非线程安全,多线程需独立实例或外层加锁。
-
contains()方法先查hashCode()(哈希集合)再逐个equals(),ArrayList全遍历、HashSet定位桶后比较,自定义类须同时重写equals()和hashCode()且逻辑一致,否则查不到;null处理因集合而异,需特别注意。
-
HashMap构造时传入的initialCapacity和loadFactor到底影响什么Java里HashMap的负载因子(loadFactor)不是运行时可改的参数——它只在构造时固化进实例,后续所有扩容逻辑都基于这个值计算阈值。所谓“动态修改”,本质是创建新实例并迁移数据,没有原地修改这回事。常见错误现象:HashMap对象已存在大量数据,有人试图通过反射强行改threshold或loadFactor字段,结果导致put行为异常、get返回null、甚至死循环(JDK7中链表成环)。JDK8后虽
-
不能直接改系统环境变量切换JDK,因为会全局生效、需重启终端和IDE、易导致构建失败或UnsupportedClassVersionError;推荐按需临时修改PATH前缀、IDE单独配置项目JDK、构建工具指定JDK及封装PowerShell函数快速切换。
-
PriorityQueue在offer()插入新元素且底层数组已满时才触发扩容,扩容规则为:旧容量<64时新容量=2×old+2,≥64时为1.5×old;不支持缩容,也无trimToSize()方法。
-
Java方法形参必须声明类型,不可为空;实参传递基本类型为值副本、引用类型为引用副本;void方法不能return表达式,非void方法每条路径须有return;返回值类型应根据是否需表达“无值”语义选择int、Integer或Optional。
-
任务不返回结果是因为用了execute()而非submit(),或任务未正确返回值;Future.get()阻塞或抛ExecutionException需检查异常原因并统一收集后调用。
-
工厂模式通过将对象创建逻辑集中封装,解耦业务代码与具体实现,支持动态类型选择、统一配置管理及后续架构演进。
-
Java对象生命周期由GCRoots引用关系决定:创建后强可达,引用链断开即不可达待回收;finalize已弃用,现代GC通过标记-清除/整理回收内存。
-
Java遍历数组有三种方式:传统for循环(需索引或修改元素)、增强for循环(简洁遍历)和StreamAPI(支持过滤映射等函数式操作),选择依需求而定。
-
Java基本类型不能直接参与OOP操作,必须用包装类(如Integer、Boolean)转为对象才能调用方法、放入集合、作为泛型参数或实现多态;因int是primitive,无方法、不继承Object、无运行时类型信息,JVM在栈上直接存值,与堆中对象机制不同。