==和Equal()的区别
我们在编程的时候,经常会遇到判断两个对象是否相等的情况。说到判断两个对象是否相等,就不得不说对象的类型和对象在内存中的存储情况。
对象类型可以分为值类型和引用类型:
值类型包括:简单类型、结构类型、枚举类型
引用类型包括:类、代表、数组、接口。
值类型是直接存储在内存的栈上的,引用类型在存储的时候有点特殊,会有一个对象引用和对象的值,对象的值存在堆上,对象引用也即对象值在堆上的地址存在栈上,
至于堆和栈在这里就不细说了。
先上代码:
#region 源代码
string str1 = "test";
string str2 = "test";
Console.WriteLine(str1 == str2);
Console.WriteLine(str1.Equals(str2));
Console.WriteLine("*********"); object o1 = str1;
object o2 = str2;
Console.WriteLine(o1 == o2);
Console.WriteLine(o1.Equals(o2));
Console.WriteLine("*********"); string str3 = new string(new char[] { 'A', 'B', 'C', 'D' });
string str4 = new string(new char[] { 'A', 'B', 'C', 'D' });
Console.WriteLine(str3 == str4);
Console.WriteLine(str3.Equals(str4));
Console.WriteLine("*********"); object ob1 = str3;
object ob2 = str4;
Console.WriteLine(ob1 == ob2);
Console.WriteLine(ob1.Equals(ob2));
Console.WriteLine("*********"); Person p1 = new Person("xiaosy");
Person p2 = new Person("xiaosy");
Console.WriteLine(p1 == p2);
Console.WriteLine(p1.Equals(p2));
Console.WriteLine("*********"); Person p3 = new Person("xiaosy");
Person p4 = p3;
Console.WriteLine(p3 == p4);
Console.WriteLine(p3.Equals(p4));
Console.WriteLine("*********");
Console.ReadKey();
#endregion
执行结果:
==对于值类型的比较,就是直接比较内容是否一样,如果内容一样直接返回true,如果内容不一样则返回false;而对于引用类型的比较,比较的则是两个变量的存储地址,即在栈里的内容是否一致。
Equal()比较的是两个对象是否是同一个对象引用,即堆中的内容是否相同。
而字符串是一个特殊的引用类型,因此,在上面的例子中,字符串str3和str4比较是相等的。因为object ob1和object ob2在内存中是两个不同的对象,所以存储的地址不同,故不相等。而equals比较的是两个对象存储地址对应的内存空间里的内容,故相等。
而object o1和object o2相等,因为系统并没有为s2分配内存,只是将“test"指向了s2.所以s1和s2指向的是同一个字符串。
对于p1和p2,也是内存中两个不同的对象,所以在内存中的地址肯定不相同,故p1==p2会返回false;又因为p1和p2是对不同对象的引用,所以调用equals方法也会返回false。
对于p3和p4,由于p4=p3,p3将对象的引用赋给了p4,p3和p4指向同一地址,是对同一个对象的引用,所以两个比较都返回true。
==和Equal()的区别的更多相关文章
- Java中equal和==区别及String创建过程
Java中equal和==区别 1.起因 在一段Java代码中,使用了两种实现方式. //第一种命令行输入 int main (String[] args) { if(args[0] == " ...
- java的==和equal的区别(一)
java的==和equal的区别 “==”是用来比较两个String对象在内存中的存放地址是否相同的.例如, 1 2 3 4 5 6 7 8 9 String test1 = "test&q ...
- == 和equal的区别?-005
1,== 和equal的区别? ==比较两个值是否相等,equal比较对对象的引用是否一致 举例: int a = 2; int b = 2; System.err.println(a == b);/ ...
- java中 == 与 equal 的区别
http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452156.html String str1 = new String("s ...
- equal与==区别
对于String中的“equal方法”和“==”一直有点混肴,今天重新看了一下他们两点的区别,记录下来让自己以后不在忘记! 先说“==”: “==”是用来比较两个String对象在内存中的存放地址是否 ...
- C# 中==和Equal的区别
http://new-fighter.iteye.com/blog/1634800 今天突然看到一种情况,颠覆了我对这比较使用方法的判断. 于是开始在网上找资料,但几乎都是Java的,好不容易找到一个 ...
- Java 关于 == 和 equal()的区别
因为用new创建了两个对象,所以a和b指向两个不同的内存地址,所以返回false equal()是object的方法,所以只适用于对象,不使用于基本类型.不过equal()默认是用“==”比较两个对象 ...
- Java Script 中 ==(Equal) 和 === (Identity Equal) 的区别和比较算法逻辑
判断两个变量是否相等在任何编程语言中都是非常重要的功能. JavaScript 提供了 == 和 === 两种判断两个变量是否相等的运算符,但我们开始学习的时候 JavaScript 的时候,就被一遍 ...
- 比较对象--"=="与"equal"的区别
String stra=new String("你好"); String strb=new String("你好"); String strc=stra; bo ...
- java中==与equal()的区别
==和equal()都是用来判断两个变量是否相等的. (1)如果两个变量是基本类型变量,且都是数值型的(不一定数据类型相同),只要是值相同,将返回true; (2)如果两个变量是引用型变量,只有它们指 ...
随机推荐
- C# 5 in a Nutshell - Delegate
1. What is delegate in C#? A delegate is an object that knows how to call a method.A delegate type d ...
- android4.4系统永不锁屏
android4.4\frameworks\base\packages\Keyguard\src\com\android\keyguard\KeyguardViewMediator.java /** ...
- bin和sbin区别
据说这个目录结构是沿袭unix的,不大清楚. bin是binary的缩写,是可执行的二进制文件./bin里面一般是基本的,大家都要用的工具:sbin里面的s是system的意思,是供system ad ...
- visio 画图工具
1.线条 [设计] --- [页面设置]----打开 对话框 [布局与排列]-----[排列] ---- [样式] --- [直 2.word中插入viso 插入→对象→visio
- tmux入门 : 3. 会话
上一节我们已经将 tmux 安装好了,现在就可以通过以下命令来启动它: $ tmux 启动之后,可以看到命令行最底部多了一条绿色的状态条,上面显示了一些信息,比如计算机名和时间等. 要退出 tmu ...
- (八)Oracle学习笔记—— 触发器
1. 触发器简介 触发器在数据库里以独立的对象存储,类似于过程(procedure)和函数(function),都有声明,执行和异常处理过程的PL/SQL块.它与存储过程和函数不同的是,存储过程与函数 ...
- C# 反射只获取自己定义的属性,不获取父类的属性
PropertyInfo[] p = user.GetType().GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | Bi ...
- Android Unique Device ID
There are several occasions when the unique identifier of a device is required. For instance you nee ...
- Hadoop文件解压缩
Class org.apache.hadoop.io.compress .CompressionCodecFactory A factory that will find the correct co ...
- RSAProtectedConfigurationProvider加密web.config
上一篇文章介绍了用 DataProtectionConfigurationProvider加密web.config文件的方法,不过他有一个缺陷,加密的文件只有在本机才能解密,如果有多台服务器的话,则需 ...