双方都是基本数据类型的数值的时候 == 比较的是双方的数值
System.out.println( 10 == 10); // true
System.out.println( 10 == 11); // false
双方数值相同为 true 不同 为 false
1.2、引用数据类型
双方都是 字符串(引用)的时候比较的是双方的 内存地址
String i1 = new String(“张三”);
String i2 = new String(“张三”);
System.out.println(i1 == i2); // false
因为 i1 与 i2 所指向堆对象的内存地址不同所以为 false
equals( ) 是 java.lang 包下 Object 类里面的一个方法
Object 类里面的 equals 方法 源码如下:
public boolean equals(Object obj) {
return (this == obj);
}
可以看见源码中使用的是 “==” ,由此可以看出 Object 里面的 equals 方法其实底层比较的是内存地址,需要把 equals 方法重写才能比较内容
- 如下,API 帮助文档中表示 equals 方法推荐覆盖
2.1、比较字符串
因为 String 类中的 equals 方法已经被 sun 公司覆盖重写,所以比较的是双方的内容
sun公司 重写的 String 类中的 equals 方法如下:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
最后
看完上述知识点如果你深感Java基础不够扎实,或者刷题刷的不够、知识不全面
小编专门为你量身定制了一套<Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法>
针对知识面不够,也莫慌!还有一整套的<Java核心进阶手册>,可以瞬间查漏补缺
全都是一丢一丢的收集整理纯手打出来的
更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~
理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~
[外链图片转存中…(img-eRX0G3Gc-1714760224052)]
[外链图片转存中…(img-Op6ntvl4-1714760224052)]