eqauls 和 ==區別和聯系

数组的equals==比较

import java.util.Arrays;

class ComparingArrays 

{

public static void main(String[] args) 

{

int[] a1 = new int[10];

int[] a2 = new int[10];

 

Arrays.fill(a1,47);

Arrays.fill(a2,47);

 

System.out.println(Arrays.equals(a1,a2));

System.out.println(a1==a2);

System.out.println(a1.equals(a2));

 

String[] str1 = new String[2];

Arrays.fill(str1,"HI");

 

String[] str2 = {new String("HI"),new String("HI")};

 

System.out.println(Arrays.equals(str1,str2));

System.out.println(str1==str2);

System.out.println(str1.equals(str2));

}

}

 

/*Output

True

Flase

False

True

False

False

*/

 

 

 

 元素的equals和==区别联系

概述:

A.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。

B.基本类型没有equals方法,equals只比较值(对象中的内容)是否相同(相同返回true)。

C.一个类如果没有定义equals方法,它将默认继承Object中的equals方法,返回值与==方法相同。

D.对于String a = a; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的。

 

C观点:

import java.util.Arrays;

class A

{

 

}

public class ComparingArrays 

{

public static void main(String[] args) 

{

A a = new A();

A a1 = new A();

 

System.out.println(a.equals(a1));

System.out.println(a==a1);

 

a1 = a ;

 

System.out.println(a.equals(a1));

System.out.println(a==a1);

}

}

/*Output

False

False

True

True

*/

 

==equals的实质

       在JAVA中利用"=="比较变量时,系统使用变量在""中所存的值作为比较的依据。即对于基本类型==比较的是值是否相等,对于对象比较的是所指向的引用是否相等.

       基本数据类型在""中存的是其内容值,而对象类型在""中存的是地址,这些地址指向""中的对象。

       java.lang包中的Object类有public boolean equals(Object obj)方法,它比较两个对象是否相等。

       其它对象的equals方法仅当被比较的两个引用指向的对象内容相同时,对象的equals()方法返回true

       总之,"==""!="比较的是地址.也可认为"==""!="比较的是对象句柄;equals()比较的是对象内容.或者说,,"==""!="比较的是""中的内容,equals()比较的是""中的内容.

 

 

D.对于String a = a; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的。

 

对于StringInteger来说,由于他们特有的创建对象的方式。使用构造器和不使用构造器得到一个对象,==方法比较所产生的结果是不同的。 String a = abc; String b = "abc"; 此时a==b得到结果为trueString a = new String("abc"); String b = new String("abc");此时a==b得到的结果为falseInteger a = 1; Integer b = 1;此时a==b的结果是trueInteger a = new Integer(1); Integer b = new Integer(1);此时a==b得到的结果为false

       通过这一点其实我们也能够更加容易理解==对内存的实际操作,实际执行的是近似于基本类型比较。

 

 

 

深入探讨equals

===================
equals方法的重要性毋须多言,只要你想比较两个对象是不是同一对象,你就应该实现equals方法,让对象用你认为相等的条件来进行比较.

下面的内容只是API的规范,没有什么太高深的意义,但我之所以最先把它列在这儿,是因为这些规范在事实中并不是真正能保证得到实现.

1.对于任何引用类型, o.equals(o) == true成立.

2.如果 o.equals(o1) == true 成立,那么o1.equals(o)==true也一定要成立.

3.如果 o.equals(o1) == true 成立且 o.equals(o2) == true 成立,那么

o1.equals(o2) == true 也成立.

4.如果第一次调用o.equals(o1) == true成立,在oo1没有改变的情况下以后的任何次调用都成立.

5.o.equals(null) == true 任何时间都不成立.

 

Database error: [Table 'ac_search_cache' is marked as crashed and should be repaired]

SELECT * FROM ac_search_cache WHERE hash = 'f91ef451f7f161b3c619c7cb5242cbd26740332f' LIMIT 1;