Java基础——equals和==号比较

我们知道,栈内存里面存放的是方法里面的局部变量,可以理解为变量都是放到栈内存中的;堆内存存放的则是对象;

 

==比较:

==可以比较数值类型(byte,short,int,long,char,float,double)和对象

1.如果两个数值类型比较(不一定要求数据类型严格相同),则只要两个变量的值相等,返回true,如下返回的b是true:

Int i = 65; 

float f = 65.0f; 

boolean b = (i == f);

2.如果是两个对象比较,只要对象的内存地址相同(即指向的是同一个对象),则返回true;不同对象(即使内容一样)则返回false;如下返回的是false:

String s1 = new String(“hello”);

String s2 = new String(“hello”); 

boolean b = (s1 == s2);

 

equals比较:

如果使用equals所在的类没有重写equals方法,那么equals比较的是对象的hashcode的ID值,也就是对象的内存地址映射,相当于==比较的结果;

如果重写了equals方法,则根据具体的实现来比较得出结果;如String类重写了equals方法,比较的是字符串的内容是否相等,相等则返回true,否则返回false:

如果两个对象的内容相同,即使内存地址不同(不是同一个对象),都会返回true,如下true:

String s1 = new String(“hello”);

String s2 = new String(“hello”);  

s1.equals(s2) ---->true

 

总结:

==比较的是对象的内存地址,equals没有重写的时候也是比较对象的内存地址,重写了则根据具体实现来比较结果

### Java 中 `==` `equals()` 的区别 在 Java 编程语言中,`==` `equals()` 主要用于比较两个实体是否相等,但两者的工作方式应用场景有所不同。 #### 操作符 `==` `==` 是一个操作符,在处理基本数据类型时,它直接比较数值上的相等性;当应用于对象引用时,则是比较两个引用所指向的对象在内存中的地址。这意味着即使两个不同实例拥有完全相同的内部状态,只要它们不是同一内存位置的实例,使用 `==` 进行比较的结果就是不相等[^1]。 ```java int a = 5; int b = 5; System.out.println(a == b); // true, 基本类型间的值比较 Object objA = new Object(); Object objB = new Object(); System.out.println(objA == objB); // false, 不同对象的引用地址不同 ``` #### 方法 `equals()` `equals()` 是定义于 `Object` 类的方法,默认行为类似于 `==`,即仅当两个引用指向同一个对象时返回 `true`。不过,很多常用类库已经对该方法进行了覆盖(重写),以便提供基于实际内容而非仅仅依据引用地址来决定平等性的能力。例如,`String`, `Integer` 等包装器类均实现了自己的版本以支持按逻辑意义下的“等于”。 ```java // 使用 String 类作为例子展示 equals() String s1 = "hello"; String s2 = "hello"; System.out.println(s1.equals(s2)); // true, 字符串内容相同 // Integer 类同样重写了 equals 方法 Integer num1 = 42; Integer num2 = 42; System.out.println(num1.equals(num2)); // true, 数字值相同 ``` 为了确保程序具有良好的可读性预期功能,开发者应当根据具体上下文选择合适的比较手段: - 当需要验证两个变量是否确切指的是同一个对象实例时,应该采用 `==`; - 如果目标是在语义层面评估两者的相似度或一致性——比如检查字符串是否有同样的字符序列或是整数持有相同的数值——则应调用相应的 `equals()` 实现[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值