-
Java中String、ArrayList、HashMap等引用类型变量存储的是堆内存地址,=赋值复制地址而非内容;修改可变对象会影响所有引用,String因不可变而例外;==比较地址,equals比较内容;传参时地址副本仍指向原对象,需注意副作用与null风险。
-
本文讲解如何使用BigDecimal替代int类型,安全处理用户输入的小数(如税率0.23)与数值的乘法运算,避免NumberFormatException,并确保金融计算的精度与可靠性。
-
应继承RuntimeException而非Exception,因其为unchecked异常,避免强制捕获污染业务逻辑;继承Exception会导致编译期强制处理,违背统一异常拦截设计。
-
Java生成二维码需引入zxing的javase模块(3.5.3版),显式设置UTF-8编码和H级容错,用BufferedImage+白底渲染避免模糊或黑块,路径含中文时确保环境UTF-8编码。
-
Java聊天室客户端最简路径是:用Socket建立TCP连接,分双线程读写(BufferedReader/InputStreamReader指定UTF-8编码读,PrintWriter/OutputStreamWriter指定UTF-8编码写),校验空输入,正确关闭资源并添加收发日志。
-
向上转型自动且安全但限制调用父类声明成员,向下转型需强制转换且必须instanceof检查以防ClassCastException;转型仅改变引用视角,不修改对象本身。
-
遍历时结构性修改集合会抛ConcurrentModificationException,因modCount与expectedModCount不一致触发fail-fast机制;安全删除须用迭代器remove()、倒序循环、removeIf()或批量移除;修改元素值(非结构变更)是允许的。
-
finally块用于确保关键代码始终执行,常用于资源释放、状态重置等场景;其典型应用包括关闭文件流、数据库连接,且需注意避免在其中抛出异常或使用return语句,否则可能掩盖异常或改变返回值;现代Java推荐优先使用try-with-resources替代手动资源管理,以提升代码安全性和可读性。
-
封装的本质是隐藏实现细节、暴露可控接口,关键在于通过访问控制与合理抽象使调用方只关心“能做什么”,而非“怎么做”,从而提升复用性。
-
Scanner读取输入卡住或跳过是因为nextInt()等方法不消费换行符,导致后续nextLine()读到空行;应统一用nextLine()解析,或在nextInt()后手动调用nextLine()清缓冲区。
-
使用Collection.isEmpty()是最安全的判空方式,语义清晰、性能为O(1),适用于所有Collection子类型;Map.isEmpty()同样推荐;Stream应用findAny().isPresent()判空;避免null检查冗余,优先通过Objects.requireNonNull或Optional显式处理。
-
静态方法不能被重写,只能被隐藏;其调用由编译期根据引用声明类型决定,不参与多态,@Override注解对其无效。
-
ConcurrentSkipListMap是Java中线程安全且有序的映射实现,基于跳表结构支持高并发读写,适用于多线程下按序访问键值对的场景。1.它通过无锁读和细粒度写锁提升性能;2.支持自然或自定义排序;3.提供导航方法如firstEntry、lastEntry等;4.常见操作如put、get、remove时间复杂度为O(logn);5.相比同步包装的TreeMap,并发性能更优,推荐用于高并发有序映射需求。
-
本文介绍如何通过XPath精准匹配具有相同父结构但不同索引的同类型子元素(如img[1]和img[2]),并统一筛选其src属性包含"red"的实例,避免硬编码索引,提升定位稳定性与可维护性。
-
Java条件语句包括if、if-else、switch和三元运算符,用于根据布尔表达式控制程序流程;if执行单向判断,if-else实现二选一分支,switch适用于多值等值比较,三元运算符简化简单条件赋值。