您的位置:

包含java中equals相同的词条

本文目录一览:

java中equals使用方法

java中equals使用方法:

equals 方法是String类从它的超类Object中继承的, 被用来检测两个对象是否相等,即两个对象的内容是否相等,区分大小写。

对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。“==”比较两个变量本身的值,即两个对象在内存中的首地址。“equals()”比较字符串中所包含的内容是否相同。 例如:

s1 = new String("abc");

s2 = new String("abc");

s1.equals(s2) 是 true

3.对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。

class A

{

      A obj1   =   new  A();

      A obj2   =   new  A();

}

    obj1.equals(obj2)是false

关于Java中equals()方法的使用。为什么比较内容相同的对象依然只是false?

java中,

(1)对于字符串变量来说,equal比较的两边对象的内容,所以内容相同返回的是true。

至于你没问到的“==”,比较的是内存中的首地址,所以如果不是同一个对象,“==”不会返回true 而是false。

举个简单的例子,

String s1="abc", s2="abc";

String s3 =new String("abc");

String s4=new String("abc");

s1==s2 //true,

s1.equals(s2) //true,

s3.equals(s3) //true,equal比较的是内容

s3==s4//false,==比较的是首地址,所以是false

(2)对于非字符串变量,equals比较的内存的首地址,这时候和==是一样的,即比较两边指向的是不是同一个对象,

Sample sa1 = new Sample();

Sample sa2 = new Sample();

sa1.equals(sa2) //false,因为不是同一对象

注意,如果加上

sa1=sa2;

那么

sa1.equals(sa2) //true

针对你问的,如果你说的两个对象是非字符串的,那么参考第2条;否则请参考第一条

java 中 equals() 相等的两个对象,hashcode() 一定相等

在java中,equals和hashcode是有设计要求的,equals相等,则hashcode一定相等,反之则不然。

为何会有这样的要求?

在集合中,比如HashSet中,要求放入的对象不能重复,怎么判定呢?

首先会调用hashcode,如果hashcode相等,则继续调用equals,也相等,则认为重复。

如果重写equals后,如果不重写hashcode,则hashcode就是继承自Object的,返回内存编码,这时候可能出现equals相等,而hashcode不等,你的对象使用集合时,就会等不到正确的结果

    public V put(K key, V value) {

        if (key == null)

            return putForNullKey(value);

        int hash = hash(key.hashCode());

        int i = indexFor(hash, table.length);

        for (EntryK,V e = table[i]; e != null; e = e.next) {

            Object k;

            if (e.hash == hash  ((k = e.key) == key || key.equals(k))) {

                V oldValue = e.value;

                e.value = value;

                e.recordAccess(this);

                return oldValue;

            }

        }

        modCount++;

        addEntry(hash, key, value, i);

        return null;

    }