==和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#计算时间间隔的方法小结
初始化两个时间变量用于演示实例. DateTime dt1 = new DateTime(2013, 10, 13, 19, 15, 50); DateTime dt2 = new DateTime( ...
- Android 网络请求框架Retrofit
Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp ...
- Gamescom2014:中国游戏公司37.com进军西方海外市场
在2014年的德国科隆国际游戏展上.Xsolla曾与37.com聊天.我们讨论了中国公司眼下进军西方市场的战略,谈到营销的最有效方法.游戏货币化,并讨论在欧洲和土耳其的网页游戏的前景. 37wan 能 ...
- LR中判断HTTP返回状态
有天,有个人问:我在做b/s测试,请问如何保存从服务器传回来的http头的信息,怎么能得到http状态,和状态200进行比较? 后来,我给出的代码如下: Action() {int i; // [WC ...
- react 执行 yarn build 后 去除 .js.map 文件
map文件是帮助我们查看报错的位置的. map文件由devtool属性控制,如果不想要map,注释掉就可以,大约webpack.config.prod.js第57行: // devtool: shou ...
- OGNL表达式语言网上转来的
1.概念:OGNL是ObjectGraphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts 2框架使用OGNL作为默认的表达式语言. 2.功能: ...
- CentOS安装rz\sz命令
执行以下命令进行安装: yum install lrzsz 安装完成后即可操作rz和sz命令. rz:本地文件上传. sz:Linux系统文件下载到本地.
- java基础讲解10-----类的高级特性
一.final关键字 1.final关键字修饰变量,表示变量不可以被改变,如果想修改,编译器不会接受的. 注意:final关键字定义的变量必须赋值 public static final 修饰 白 ...
- Swift不等于nil
我照着书上的例子写下了如下代码,运行后发现提示Nil cannot be assigned to type 'Int' if i!=nil {//Nil cannot be assigned to t ...
- angularJS 第一天 使用模型与控制器绑定数据
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...