Java、C#中'=='和'equals'的区别
2022/3/3 12:15:03
本文主要是介绍Java、C#中'=='和'equals'的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java、C#中'=='和'equals'的区别
前段时间水群跟群友讨论到'=='和'equals'的区别,抽空整理记录下。
Java
先说'=='
下面是测试代码
System.out.println(1==1); System.out.println(new Integer(1)==new Integer(1));
得到的结果是
true false
结论:对于基础类型(int、boolean、char)这类,'=='就是比较他们的值。而对于对象,它比较的是这个对象指向的地址,简单来讲就是等号两边是不是同一个对象,是返回true,否则返回false。测试用例中new出了两个Integer对象,虽然值相同,但是显然这两不是同一个对象。
然后是'equals'
先看Object类的'equals'方法
public boolean equals(Object obj) { return (this == obj); }
可以看到,Object类的'equals'方法只是对'=='做了简单的封装。
所以Java里的类,如果没有重写过'equals'方法,那么'=='和'equals'方法是没有本质区别的。
下面是一些常用的重写了'equals'方法的类
String类源码
public boolean equals(Object anObject) { if (this == anObject) { //先用==判断这两是不是同一个对象 return true; } if (anObject instanceof String) { //判断传入对象是否是String类的实例 String anotherString = (String)anObject;//强制转换为String类型 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; }
Integer类源码
public boolean equals(Object obj) { if (obj instanceof Integer) {//判断传入对象是否是Integer类的实例 return value == ((Integer)obj).intValue();//比较两者的值 } return false; }
HashMap类
public final boolean equals(Object o) { if (o == this)//先用==判断这两是不是同一个对象 return true; if (o instanceof Map.Entry) {//判断传入对象是否是Map的实例 Map.Entry<?,?> e = (Map.Entry<?,?>)o; if (Objects.equals(key, e.getKey()) && Objects.equals(value, e.getValue()))//分别比较两者的key和value是否一致,用的Objects的equals return true; } return false; }
String的特殊情况
String a="123"; String b="123"; System.out.println(a==b);
输出结果是true
这是因为a和b指向的都是“123”这个字符串,内存里没有生成一个新的“123”字符串。
在代码里写死的这些字符串,在程序运行的时候会自动在内存里创建一片空间,在拿它给其他String对象赋值的时候,只是简单地将对象的指针指向这个空间。
上面代码等同于
String s = new String("123"); String a=s; String b=s; System.out.println(a==b);
很显然,a和b其实都是s,所以输出true。
C#
C#中'equals'情况与Java相似,但是'=='略有区别。
在C#中,String类是特殊的,'=='与Java中String类的'equals'方法相似,也是先比较两者的地址是否一致,不一致再比较两者的值是否一致。
这篇关于Java、C#中'=='和'equals'的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#