JAVA中equsle的简单介绍

博主:adminadmin 2022-12-30 09:57:08 878

今天给各位分享JAVA中equsle的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

在JAVA中eqauls()与==有什么区别?

解释一下==号,他比较的是一个对象在内存中的地址值,

比如2个字符串对象

String s1 = new String("str");

String s2 = new String("str");

如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。

equals的情况比较复杂,它是java.lang.Object类中的一个方法。因为java中所有的类都默认继承于Object,所以所有的类都有这个方法。

在Object类源码中是这样写的。

public boolean equals(Object obj) {

return (this == obj);

}

他同样使用==号进行内存地址的比较。但是许多java类中都重写了这个方法,比如String。

public boolean equals(Object anObject) {

if (this == anObject) {

return true;

}

if (anObject instanceof String) {

String anotherString = (String)anObject;

int n = count;

if (n == anotherString.count) {

char v1[] = value;

char v2[] = anotherString.value;

int i = offset;

int j = anotherString.offset;

while (n-- != 0) {

if (v1[i++] != v2[j++])

return false;

}

return true;

}

}

return false;

}

String里的方法,如果==号比较不相等,还会进行一下值的比较。

所以equals方法具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么他和==号等价。

java怎么比较两个对象是否相等?

java中的基本数据类型判断是否相等,直接使用"=="就行了,相等返回true,否则,返回false。

但是java中的引用类型的对象比较变态,假设有两个引用对象obj1,obj2,

obj1==obj2 判断是obj1,obj2这两个引用变量是否相等,即它们所指向的对象是否为同一个对象。言外之意就是要求两个变量所指内存地址相等的时候,才能返回true,每个对象都有自己的一块内存,因此必须指向同一个对象才返回ture。

如果想要自定义两个对象(不是一个对象,即这两个对象分别有自己的一块内存)是否相等的规则,那么必须在对象的类定义中重写equals()方法,如果不重写equals()方法的话,默认的比较方式是比较两个对象是否为同一个对象。

在Java API中,有些类重写了equals()方法,它们的比较规则是:当且仅当该equals方法参数不是 null,两个变量的类型、内容都相同,则比较结果为true。这些类包括:String、Double、Float、Long、Integer、Short、Byte、、Boolean、BigDecimal、BigInteger等等,太多太多了,但是常见的就这些了,具体可以查看API中类的equals()方法,就知道了。

重写equals()方法的步骤一般如下:

1、先用“==”判断是否相等。

2、判断equals()方法的参数是否为null,如果为null,则返回false;因为当前对象不可能为null,如果为null,则不能调用其equals()方法,否则抛java.lang.NullPointerException异常。

3、当参数不为null,则如果两个对象的运行时类(通过getClass()获取)不相等,返回false,否则继续判断。

4、判断类的成员是否对应相等。往下就随意发挥了。

java里equals和hashCode之间什么关系

equals与hashcode的关系是:

两个对象在equals相等的情况下,hashcode有可能相等也有可能不相等,

而两个对象在hashcode不相等的情况下,equals也必定不相等。

理解equals的应用:它是用于用户在进行对比的时候,这个时候对比的是内容是否相等

理解hashcode的应用:例如set集合,它的不可重复,进行对比的便是hashcode是否相等,因此set集合实现了不可重复。

如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。

即使两个hashCode()返回的结果相等,两个对象的equals方法也不一定相等。

扩展资料:

equals:

电脑编程语言,被用来检测两个对象是否相等,即两个对象的内容是否相等。

equals 方法(是String类从它的超类Object中继承的)

==用于比较引用和比较基本数据类型时具有不同的功能:

比较基本数据类型,如果两个值相同,则结果为true

而在比较引用时,如果引用指向内存中的同一对象,结果为true

hashCode:

是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值。

支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。

HashMap对象是根据其Key的hashCode来获取对应的Value。

在重写父类的equals方法时,也重写hashcode方法,使相等的两个对象获取的HashCode也相等。

这样当此对象做Map类中的Key时,两个equals为true的对象其获取的value都是同一个,比较符合实际。

参考资料:

百度百科 ------ hashcode

百度百科 ------ equals

java重写hashcode方法要重写equals吗

Java对于eqauls方法和hashCode方法是这样规定的:

1、如果两个对象相同,那么它们的hashCode值一定要相同;

2、如果两个对象的hashCode相同,它们并不一定相同(上面说的对象相同指的是用eqauls方法比较。)

在代码中一般都是用equals里比较两个同两个对对象。我一般会重新equals方法。hashcode一般用户很少用到。当时如果要比较同一个对象是否相等,你必须重新equals方法。

Java中关于==和equal的区别 以及equals方法重写

//==与equals的默认行为都是比较引用是否相等,即是否引用了同一个对象。

//且==的行为是固定的,它总是比较引用,

//而equals的行为可以在子类中由用户重写。

//没有equal方法。下面是例子。

public class EQ

{

public static void main(String[] args)

{

//s11,s12引用了两个不同的对象,这两个对象的所有字段的值都相等

Student1 s11=new Student1("lili",'女',19);

Student1 s12=new Student1("lili",'女',19);

//s11,s13引用了一个相同的对象

Student1 s13=s11;

//这个if...else输出s11!=s12,因为==默认是比较引用,

//而s11与s12引用的是两个不同的对象

if(s11==s12)

{

System.out.println("s11==s12");

}

else

{

System.out.println("s11!=s12");

}

//这个if...else输出not s11.equals(s12),

if(s11.equals(s12))

{

System.out.println("s11.equals(s12)");

}

else

{

System.out.println("not s11.equals(s12)");

}

//这个if...else输出s11==s13,

//因为s11与s13引用的是同一个对象

if(s11==s13)

{

System.out.println("s11==s13");

}

else

{

System.out.println("s11!=s13");

}

//这个if...else输出s11.equals(s13)

if(s11.equals(s13))

{

System.out.println("s11.equals(s13)");

}

else

{

System.out.println("not s11.equals(s13)");

}

//s21,s22引用了两个不同的对象,这两个对象只有age字段的值相等

Student2 s21=new Student2("lili",'女',19);

Student2 s22=new Student2("张三",'男',19);

//这个if...else输出s11!=s12,因为==总是比较引用

if(s21==s22)

{

System.out.println("s21==s22");

}

else

{

System.out.println("s21!=s22");

}

//这个if...else输出s21.equals(s22),因为调用的是子类Student2的重写的equals方法

if(s21.equals(s22))

{

System.out.println("s21.equals(s22)");

}

else

{

System.out.println("not s21.equals(s22)");

}

}

}

class Student1

{

Student1(String n,char s,int a)

{

this.name=n;

this.sex=s;

this.age=a;

}

String name;

char sex;

int age;

}

//重写了继承自类Object的equals和hashCode方法

class Student2

{

Student2(String n,char s,int a)

{

this.name=n;

this.sex=s;

this.age=a;

}

//重写equals,如果两个Student2对象的age值相等,则它们相等

//重写此方法时,通常也必须重写hashCode方法,以维护hashCode方法的常规协定,

//该协定声明相等对象必须具有相等的哈希码。

public boolean equals(Object obj)

{

boolean r=false;

System.out.println("Student2.equals被调用!");

if(null!=obj obj instanceof Student2)

{

r=(this.age==((Student2)obj).age);

}

return r;

}

//重写hashCode

public int hashCode()

{

return age;

}

String name;

char sex;

int age;

}

关于JAVA中equsle和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。