标签: java

44 篇文章

为什么重写 equals()就必须要同时重写 hashCode()?
这是一个非常经典的Java面试题。重写 equals() 时必须重写 hashCode() 主要是为了维护 hashCode方法的通用约定,确保基于哈希的集合(如 HashMap、HashSet、Hashtable)能够正常工作。 根本原因:hashCode 方法的约定 在 Object类的规范中,hashCode()方法有以下重要约定: 一致性:…
Java 中 final、finally 和 finalize 各有什么区别?
在Java中,final、finally 和 finalize​ 是完全不同的三个概念,主要区别如下: 1. final(关键字) 作用:用于声明不可变的实体 修饰变量:变量一旦初始化就不能被修改(基本类型值不能变,引用类型引用不能变) 修饰方法:方法不能被子类重写(override) 修饰类:类不能被继承 // 1. final变量 final …
Java 中 String、StringBuffer 和 StringBuilder 的区别是什么?
在 Java 中,String、StringBuffer和 StringBuilder都是用于处理字符串的类,但它们在可变性、线程安全性和性能方面有重要区别。以下是详细的对比: 1. String(字符串常量) 不可变性:String对象创建后不可改变,任何修改操作都会生成新的对象 线程安全:由于不可变,天生线程安全 存储位置:字符串常量池(字面量…
为什么不能用浮点型表示金额?
这是一个非常重要且常见的问题。简单来说,因为浮点型(如 float、double)是二进制近似值,无法精确表示十进制小数,而金融计算要求绝对精确,一分一厘都不能有误差。 下面从原理、问题和解决方案三个方面详细解释: 1. 根本原因:二进制浮点数的固有缺陷 计算机使用二进制(0和1)存储数字。浮点数(如IEEE 754标准)通过“符号位+指数+尾数”…
java 实现序列化和反序列化为什么要实现Serializable接口?
实现 Serializable接口的主要原因和机制如下: 一、核心原因 1. 标记接口机制 Serializable是一个标记接口(marker interface),没有定义任何方法,它的作用是: 告知JVM:这个类的对象可以被序列化 安全机制:防止意外序列化,必须显式声明 // 必须显式声明 public class User implemen…
Spring Boot动态注入删除bean
概述 因为如果采用配置文件或者注解,我们要加入对象的话,还要重启服务,如果我们想要避免这一情况就得采用动态处理bean,包括:动态注入,动态删除。 动态注入bean思路 在具体进行代码实现的时候,我们要知道,Spring管理bean的对象是BeanFactory,具体的是DefaultListableBeanFactory,在这个类当中有一个注入b…
java中如何使用redis实现分布式锁
在Java中使用Redis实现分布式锁主要有两种方式:一种是使用Redisson客户端库,另一种是使用Jedis/Lettuce配合Lua脚本。下面分别介绍这两种实现方式: 1. 使用Redisson实现(推荐) Redisson是一个成熟的Redis客户端,内置了分布式锁的实现。 1.1 添加依赖 <dependency> <g…