JAVA 一些方法
equals 和 == 的区别
- 首先的区别是,equals 是方法,而 == 是操作符;
- 对于基本类型的变量来说(如
short
、int
、long
、float
、double
),只能使用 == ,因为这些基本类型的变量没有 equals 方法。对于基本类型变量的比较,使用 == 比较, 一般比较的是它们的值。 - 对于引用类型的变量来说(例如 String 类)才有 equals 方法,因为 String 继承了 Object 类, equals 是 Object 类的通用方法。对于该类型对象的比较,默认情况下,也就是没有复写 Object 类的 equals 方法,使用 == 和 equals 比较是一样效果的,都是比较的是它们在内存中的存放地址。但是对于某些类来说,为了满足自身业务需求,可能存在 equals 方法被复写的情况,这时使用 equals 方法比较需要看具体的情况,例如 String 类,使用 equals 方法会比较它们的值
Us u1 = new Us(1, 2); Us u2 = new Us(1, 2); System.out.println(u1 == u2);//false Us u3 = u1; System.out.println(u1 == u3);//true
Us u1 = new Us(1, 2); Us u2 = new Us(1, 2); System.out.println(u1.equals(u2));// false Us u3 = u1; System.out.println(u1.equals(u3));// true
String equals 被重写 比较值
String a = "Hello World"; String b = new String("Hello World"); String c = b; //引用传递 System.out.println("a == b:" + a == b); //false System.out.println("b == c:" + b == c); //true System.out.println("a == c:" + a == c); //false System.out.println("a.equals(b):" + a.equals(b)); //true System.out.println("b.equals(c):" + b.equals(c)); //true System.out.println("a.equals(c):" + a.equals(c)); //true 最终的打印会是: a == b:false b == c:true a == c:false a.equals(b):true b.equals(c):true a.equals(c):true
Collection和Collections有什么区别?
- Collection是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,所有集合都是它的子类,比如List、Set等。
- Collections是一个包装类,包含了很多静态方法、不能被实例化,而是作为工具类使用,比如提供的排序方法: Collections.sort(list);提供的反转方法:Collections.reverse(list)。
hashCode() 与 equals()
hashCode()
和 equals()
都是用于比较两个对象是否相等
hashCode()
的作用是获取哈希码(int
整数),也称为散列码。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode()
定义在 JDK 的 Object
类中,这就意味着 Java 中的任何类都包含有 hashCode()
函数。
那为什么 JDK 还要同时提供这两个方法呢
这是因为在一些容器(比如 HashMap
、HashSet
)中,有了 hashCode()
之后,判断元素是否在对应容器中的效率会更高(参考添加元素进HastSet
的过程)
那为什么不只提供 hashCode()
方法呢?
这是因为两个对象的hashCode
值相等并不代表两个对象就相等
为什么重写 equals() 时必须重写 hashCode() 方法?
因为两个相等的对象的 hashCode
值必须是相等。也就是说如果 equals
方法判断两个对象是相等的,那这两个对象的 hashCode
值也要相等。
如果重写 equals()
时没有重写 hashCode()
方法的话就可能会导致 equals
方法判断是相等的两个对象,hashCode
值却不相等。
set调用equals方法验证没有问题,但是有个前提条件。正确的验证流程应该是:
比较对象的hashCode是否相同,若相同,再进行equals方法的判断,true认为元素重复,反之元素不重复。若hashCode不相同,则直接返回元素不重复并将元素插入。
简述throw与throws的区别
throw一般是用在方法体的内部,由开发者定义当程序语句出现问题后主动抛出一个异常。
throws一般用于方法声明上,代表该方法可能会抛出的异常列表。
x-- 和 --x
int x = 3; int y = 3; int b = x--; System.out.println(x + " " + b);// 2 3 int c = --y; System.out.println(y + " " + c);// 2 2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现