-
contains()方法先查hashCode()(哈希集合)再逐个equals(),ArrayList全遍历、HashSet定位桶后比较,自定义类须同时重写equals()和hashCode()且逻辑一致,否则查不到;null处理因集合而异,需特别注意。
-
断言默认关闭,需用-ea启用,语法为assert布尔表达式或assert布尔表达式:错误信息,用于调试时验证条件。
-
字段访问取决于引用类型而非实际对象类型,子类同名字段会隐藏父类字段。1.当父类和子类有同名字段时,通过父类引用访问的是父类字段,即使指向子类实例;2.子类中可用super关键字访问被隐藏的父类字段;3.静态字段同样遵循隐藏规则,依据声明类型决定访问哪个静态字段;4.与方法重写不同,字段无多态性,不进行动态绑定。建议避免继承中使用同名字段以提升代码清晰度。
-
本文详解MinIOJavaSDK中预签名URL的过期时间控制机制,说明如何通过expiry()方法自定义有效期(支持最长7天及特殊场景的长期有效方案),并强调安全实践与替代架构建议。
-
应优先用sudopkginstallopenjdk17安装Java,避免ports编译;配置JAVA_HOME为/usr/local/openjdk17,修改/etc/login.conf设置环境变量与ulimit,并执行cap_mkdb生效。
-
Java避免死锁需打破四个必要条件,核心是按固定顺序加锁、使用带超时的tryLock、缩小锁粒度、避免嵌套锁与锁升级,并优先选用无锁或线程安全类。
-
while先判断后执行,循环体可能执行0次;do-while先执行后判断,循环体至少执行1次;语法上while为“while(条件){}”,do-while为“do{}while(条件);”。
-
replace用于字面量全量替换,replaceAll和replaceFirst基于正则全局/首次替换;前者不解析正则元字符,后两者需转义且支持捕获组引用。
-
Java标签搜索需建三表(主表、标签表、关联表)实现多对多关系,用JPA/MyBatis支持AND/OR语义查询,前端提供补全与胶囊式筛选,辅以Redis缓存热门组合。
-
Java7+的switch对String不是语法糖,而是编译器生成查找表并结合hashCode()与equals()双重校验;所有case必须是编译期常量,null值仍抛NPE,性能优于if-else但弱于intswitch。
-
本文介绍一种基于Java8+Matcher.replaceAll(Function)的健壮方案,用单次正则匹配高效替换形如$1、$11、${12}的位置参数占位符,避免手动遍历与顺序依赖问题,并兼顾边界安全性与可读性。
-
Java里&&和||为什么有时不执行右边?因为它们是短路运算符——左边结果已能确定整个表达式真假时,右边直接跳过。这不是bug,是设计行为。比如if(obj!=null&&obj.isValid()),如果obj是null,obj.isValid()根本不会调用,避免空指针。但反过来,if(obj.isValid()&&obj!=null)就会崩。用&&做安全判空时,把可能为null或false的条件放左边用||做默认值兜底时(如str
-
在Thymeleaf模板中引用Java多级静态嵌套类(如L1.L2.L3.MyEnum)时,必须使用$符号替代.作为嵌套层级分隔符,否则会因类名解析失败而抛出“Typecannotbefound”错误。
-
record必须至少声明一个字段,不可继承或被继承,自动实现基于字段值的equals/hashCode/toString,字段隐式final,支持自定义构造器但须调用canonical构造器。
-
ArithmeticException不仅由除零引发,还包括整数溢出(通过Math.*Exact方法)、BigDecimal除法精度不足、BigInteger负模或除零等场景,需按类型严格校验边界。