"=="和equals方法的区别

.==和equal

.栈内存和对内存

单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚)

==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。

equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:

String a=new String("foo");

String b=new String("foo");

两条new语句创建了两个对象,然后用a/b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。

在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,String input = …;input.equals(“quit”),许多人稍不注意就使用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。记住,字符串的比较基本上都是使用equals方法。

如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:

boolean equals(Object o){

return this==o;

}

这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。

栈内存和堆内存

栈内存中存放在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。

堆内存用于存放由new创建的对象和数组。

时间: 2024-10-08 14:30:53

"=="和equals方法的区别的相关文章

Java中“==”与equals方法的区别

1. 用“==”比较两个变量,如果两个变量是基本类型变量,且都是数值类,则值相等就返回true 如果两个变量是引用型变量,则两个对象的地址一样,即指向同一个对象,则返回true 2.equals:String类对equals进行了重写:1)若是同一个对象,返回true: 2)若不是,则比较它们的值,值相同,返回true 重写代码: public boolean equals(Object anObject) { if (this == anObject) { return true; } if

C#中==与Equals方法的区别

usingSystem;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{    class Person    {        private string name;        public string Name        {            get { return name; }            set { name

==运算符和equals()方法的区别

Java语言程序中判断两个变量是否相等有两种方式:一是运用==运算符,二是运用equals方法. 1. ==运算符 对于==运算符来说,如果两个变量是基本类型的,并且是数值类型,则只要它们的值相等,就会返回true:然而如果是两个引用类型的变量,则分为两种情况:1)它们指向同一个对象,结果返回true:2)它们指向不同的对象,即使对象内容相同,结果还是返回false:下面程序示范了使用==运算符比较两个变量是否相等的结果: public class Test { public static vo

java中 == 和 equals()方法的区别

参考博客: 1.当要判断两个对象是否是相同时,可以重写equals()方法.....参考:   http://www.2cto.com/kf/201408/327873.html 2.具体 : http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html 3.http://blog.csdn.net/xcysuccess3/article/details/6557771 主要注意的地方:String Integer等类的equal

JAVA面试题:equals()方法和== 区别

http://bbs.csdn.net/topics/390000725 总结: equals在没重写之前和==一样,重写之后,equals只要内容一样即为true equals跟==一般情况下是等价的,但是对于String类型,它重写了equals方法,比较的是内容.默认情况下两个都是比较的引用地址,除非你重写equals方法. equals源码: public boolean equals(Object anObject) { if (this == anObject) { return t

Java基础之"=="和 和 equals 方法的区别

一."=="操作符 ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符. 如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存) ,变量也占用一块内存,例如 Objet obj = new Object();变量 obj 是一个内存,new Object()是另一个内存,此时,变量 obj 所对应的内存中存储的数值就是对象占用的那块内存

==和equals方法的区别和联系

1.== (1)基本数据类型:比较的是值是否相等 int a=1; int b=1; System.out.println(a==b); 返回true. (2)引用数据类型,比较的是是否为同一对象: Student student1=new Student("201911","zhai"); Student student2=new Student("201912","zhang"); System.out.println(s

hashcode和equals方法的区别与联系

equals:比较的是两个对象的内存地址值 hashCode:比较的是两个对象在hash表中的位置 hashCode的由来:对象的内存地址通过hash函数算法得到hashcode          1.equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的.          2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的. HashCode的存在主要是为了查找的快捷性 每当需要对比两

java中‘==’和‘equals()’方法的有趣探索

这两天在看周志明的<深入理解java虚拟机>,受益颇多,根据书中的启示,对java中'=='和'equals()'方法的区别做了一些探索. 首先,为了更快地让进入状态,我们先来所几个判断题,例程如下,请判断各个System.out.println()输出的结果. <pre name="code" class="java"> public static void main(String[] args) { Integer a =1; Integ