博客
关于我
"=="和equals()的区别
阅读量:799 次
发布时间:2023-04-02

本文共 2153 字,大约阅读时间需要 7 分钟。

一、基本类型

对于Java中的简单类型int,比较两个值的大小只能使用“==”运算符。因为简单类型的值是直接存储在内存中的,而不是作为对象存在的。

int n1 = 10;
int n2 = 10;
if (n1 == n2) {
System.out.println("n1 == n2");
}

输出结果:

n1 == n2


二、JDK自带的类

对于JDK自带的类(如ArrayListHashMap等),比较对象的方式与简单类型有所不同。“==”运算符比较的是两个对象的内存地址,而equals()方法比较的是两个对象的值是否相等。

List
list1 = Arrays.asList(1, 2, 3);
List
list2 = Arrays.asList(1, 2, 3);
if (list1 != list2) {
System.out.println("list1 != list2");
}
if (list1.equals(list2)) {
System.out.println("list1.equals(list2)");
}

输出结果:

list1 != list2 list1.equals(list2)

需要注意的是,String类型的对象特殊。对于String类型,如果使用new关键字创建对象,则每个对象都会分配独立的内存;如果仅定义一个对象,则会从字符串池中获取已存在的字符串。

String s = new String("hello");
String ss = new String("hello");
if (s.equals(ss)) {
System.out.println("s.equals(ss)");
}
if (s != ss) {
System.out.println("s != ss");
}

输出结果:

s.equals(ss) s != ss

如果直接定义String对象,则两个变量将共享同一内存块:

String s = "hello world";
String ss = "hello world";
if (s.equals(ss)) {
System.out.println("s.equals(ss)");
}
if (s == ss) {
System.out.println("s == ss");
}

输出结果:

s.equals(ss) s == ss


三、自定义的类

对于自定义的类,如果没有继承JDK自带的类或重写Object中的equals方法,则“==”和equals()方法的功能相同,都比较两个对象是否相等。

public class Customer {}

测试代码:

Customer c1 = new Customer();
Customer c2 = new Customer();
if (c1 != c2) {
System.out.println("c1 != c2");
}
if (!c1.equals(c2)) {
System.out.println("!c1.equals(c2)");
}

输出结果:

c1 != c2 !c1.equals(c2)

这是因为Customer类默认继承了Object类的equals方法,Object类的equals方法只检查两个对象是否是同一个对象。

如果自定义类重写了equals方法,则equals()方法的逻辑将由类本身定义。例如:

public class Customer {
private String name;
public Customer(String name) {
super();
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (null == obj) {
return false;
}
Customer objCustomer = (Customer) obj;
if (this.name.equals(objCustomer.name)) {
return true;
}
return false;
}
}

测试代码:

Customer c1 = new Customer("lzj");
Customer c2 = new Customer("lzj");
if (c1 != c2) {
System.out.println("c1 != c2");
}
if (c1.equals(c2)) {
System.out.println("c1.equals(c2)");
}

输出结果:

c1 != c2 c1.equals(c2)

转载地址:http://yaefk.baihongyu.com/

你可能感兴趣的文章
oracle dg switchover,DG Switchover fails
查看>>
Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql
查看>>
Oracle EBS环境下查找数据源(OAF篇)
查看>>
oracle Extract 函数
查看>>
Oracle GoldenGate Director安装和配置(无图)
查看>>
oracle ogg 单实例双向复制搭建(oracle-oracle)--Oracle GoldenGate
查看>>
oracle scott趣事
查看>>
oracle script
查看>>
Oracle select表要带双引号的原因
查看>>
Oracle SOA Suit Adapter
查看>>
Oracle Spatial GeoRaster 金字塔栅格存储
查看>>
Oracle Spatial空间数据库建立
查看>>
UML— 活动图
查看>>
Oracle Statspack分析报告详解(一)
查看>>
oracle tirger_在Oracle中,临时表和全局临时表有什么区别?
查看>>
oracle where 条件的执行顺序分析1
查看>>
oracle 使用leading, use_nl, rownum调优
查看>>
oracle 修改字段类型方法
查看>>
oracle 内存参数示意图
查看>>
Oracle 写存储过程的一个模板还有一些基本的知识点
查看>>