前言
🌚夜聊缘由
Java面试必问!equals和==傻傻分不清?一文让你笑出腹肌!
想象你去相亲,对方问你:“你和我是不是同一个人?”
你一脸懵逼:“这问题太抽象了吧!”
对方掏出身份证:“身份证号一样吗?”(这叫==)
又问:“性格脾气都一样吗?”(这叫equals)
Java中的==
和equals
就像相亲中的“身份证号”和“灵魂契合度”,今天咱们用“相亲理论”+“代码实战”,让你彻底告别面试翻车现场!
🌟闪亮主角
一文搞懂Java中equals和==的区别:从相亲现场到代码战场
大家好,我是JavaDog程序狗。
今天带你拆解Java中这对“相爱相杀”的双胞胎操作符!从“身份证号玄学”到“灵魂伴侣鉴定”,咱们一个不落!
正文
🎯主要目标
1. 为什么==
和equals
总让人头秃?
2. ==
:身份证号比对大师 vs equals
:灵魂伴侣鉴定师
3. 基本类型和引用类型:相亲对象的“人设崩塌”现场
4. String的骚操作:为什么有时候==
也能当equals
用?
5. 代码实战:用相亲案例演示操作符的“相爱相杀”
🍪目标讲解
一. 为什么==
和equals
总让人头秃?
1. 白话理解
Java中的==
和equals
就像相亲中的两种提问方式:
==
:问的是“身份证号一样吗?”(比对内存地址)equals
:问的是“你是不是我灵魂伴侣?”(比对实际内容)
2. 技术定义
==
:比较基本类型值是否相等,或引用类型指向的内存地址是否相同。equals
:由Object
类定义,默认行为与==
相同,但可以被重写(比如String
类)来比较实际内容。
二. ==
vs equals
:身份证号 vs 灵魂契合度
1. 基本类型:直接比颜值(值)
int a = 10;
int b = 10;
System.out.println(a == b); // true(颜值一样)
2. 引用类型:比身份证号 vs 比灵魂
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1 == str2); // false(身份证号不同!)
System.out.println(str1.equals(str2)); // true(灵魂契合!)
3. 特殊案例:String的骚操作
String str3 = "hello";
String str4 = "hello";
System.out.println(str3 == str4); // true(字符串常量池的玄学!)
三. 常见翻车现场:面试官的“灵魂拷问”
1. 案例1:自定义对象的“相亲失败”
class Person {
String name;
int age;
// 必须重写equals!否则相亲失败!
}
Person p1 = new Person("张三", 25);
Person p2 = new Person("张三", 25);
System.out.println(p1.equals(p2)); // false(默认比身份证号!)
2. 案例2:数组的“颜值陷阱”
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
System.out.println(arr1.equals(arr2)); // 报错!数组没有重写equals!
System.out.println(Arrays.equals(arr1, arr2)); // 正确姿势!
四. 代码实战:用相亲案例演示操作符的“相爱相杀”
1. 场景:程序员的相亲现场
class Programmer {
String name;
int salary;
// 必须重写equals!否则相亲翻车!
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Programmer that = (Programmer) obj;
return salary == that.salary &&
Objects.equals(name, that.name);
}
}
Programmer me = new Programmer("JavaDog", 30000);
Programmer candidate1 = me; // 同一个身份证号!
Programmer candidate2 = new Programmer("JavaDog", 30000);
System.out.println(me == candidate1); // true(身份证号相同!)
System.out.println(me == candidate2); // false(新身份证!)
System.out.println(me.equals(candidate2)); // true(灵魂契合!)
2. 实验结果
// 输出:
// true
// false
// true
总结
Java中的==
和equals
就像相亲中的“身份证号”和“灵魂契合度”:
==
:比对内存地址(身份证号),适合基本类型或判断对象是否为同一个实例。equals
:比对实际内容(灵魂契合度),需要手动重写(尤其是自定义类)!
记住:
- String类是个例外(字符串常量池的玄学)。
- 数组和集合类要小心(默认不比较内容!)。
最后送你一句程序员相亲金句:
“我们虽然身份证号不同,但equals()说我们是灵魂伴侣!”
🍈猜你想问
如何与博主联系进行探讨
1.关注公众号【JavaDog程序狗】
公众号回复【入群】或者【加入】,便可成为【程序员学习交流摸鱼群】的一员,问题随便问,牛逼随便吹,目前群内已有超过380+个小伙伴啦!!!
2. 踩踩博主博客
里面有博主的私密联系方式呦 !,大家可以在里面留言,随意发挥,有问必答😘
🍯猜你喜欢
文章推荐
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
【项目实战】SpringBoot+uniapp+uview2打造H5+小程序+APP入门学习的聊天小项目
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【模块分层】还不会SpringBoot项目模块分层?来这手把手教你!