答:数组使用 length 字段,例如 values.length;String 使用 length() 方法,例如 text.length()。数组没有 length() 方法。集合通常使用 size(),不要把这几种写法混为一谈。
答:在 Java 21、不开启预览的前提下,byte 可以,String 可以,基本类型 long 不能直接作为 switch 选择器。传统常量 switch 还支持 short、char、int、对应包装类型和枚举。Java 21 的模式 switch 又支持更广泛的引用类型,不能把旧式类型列表当成全部规则。
答:需要 Integer、Double 对象时可使用对应的 valueOf(String);需要基本类型时可使用 parseInt、parseDouble。解析前先约定是否允许空白、小数、正负号、科学计数法及特殊浮点值,失败时给调用方明确反馈。
答:可以,关键是保护内部状态。构造时不要直接保存外部可随意修改的对象,访问时也不要把内部可变对象泄露出去;需要时做防御性复制。final 只能固定字段的引用值,不能让被引用的集合、数组或其他对象自动不可变。
答:WeakReference 不会阻止一个只剩弱可达状态的对象被回收;SoftReference 则允许垃圾收集器根据内存需求与实现策略保留或清理对象。软引用比弱引用更偏向“暂时保留”,但不是可靠缓存策略,也不能给出固定的存活时间。
答:JDK 提供开发和运行 Java 程序的工具与组件;JRE 是运行环境这一概念,通常包括虚拟机及运行所需库;JVM 执行字节码并管理运行时行为;JIT 是一些 JVM 实现中把热点代码编译为机器码的机制。JIT 不是与 JVM 并列的独立运行环境。
答:hashCode() 返回一个 int 类型的哈希值,供 HashMap、HashSet 等哈希结构使用。它与 equals() 的核心约定是:在相关状态没有改变的前提下,相等对象必须给出相同哈希值;不同对象可以发生碰撞。哈希值不是身份证,不要求全局唯一。
答:一维数组常用 Arrays.toString,嵌套对象数组常用 Arrays.deepToString。直接把普通数组交给 println,通常不会逐个打印元素,而是得到该数组对象的默认字符串表示。需要自定义格式时,可以遍历或使用适合的格式化逻辑。
答:可以,这叫哈希碰撞。hashCode 只有有限的 int 取值,而可能的对象内容远不止这些,因此不能要求不同对象的哈希值永远不同。真正的约束只有“equals 相等,则 hashCode 必须相等”,反方向不成立。
答:先明确“相同”是什么意思。如果两个对象按 equals() 判断相等,合规实现必须让它们的 hashCode 相同。如果指同一个对象在不同时间被修改,相等性相关状态变化后,哈希值可以变化;如果比较不同运行过程,也不能无条件要求数值不变。