Java中“==”与“equal()”的区别。

1“==”

   在基本数据类型:(byte,short,char,int,long,float,double,boolean) 中,“==”都是 比较的他们的值。

   在复合数据类型 :(对象,数组) 中“==”都是比较的的内存地址(也就是堆内存地址)

   对于复合数据类型,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。因为每new一次,都会重新开辟堆内存空间。

 2,equal

  JAVA当中所有的类都是继承于Object这个超类的,在Object类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,

  但在一些类库当中这个方法被复写了,如String、Integer、Date。在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。 

  所以说,对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,
 
  跟双等号(==)的结果相同;如果被复写,按照复写的要求来。

 3,== 与equal的区别

  ==:比较的是两个字符串内存地址的数值是否相等,属于数值比较;

 equals():比较的是两个字符串的内容,属于内容比较。
 
所以看一下以下代码:
 
1 public class StringDemo {
 2     public static void main(String args[]) {
 3         String str1 = "Hello";
 4         String str2 = new String("Hello");
 5         String str3 = str2; // 引用传递
 6         System.out.println(str1 == str2); // false (比的是地址)
 7         System.out.println(str1 == str3); // false (比的是地址)
 8         System.out.println(str2 == str3); // true (比的是地址)
 9         System.out.println(str1.equals(str2)); // true (比的是值)
10         System.out.println(str1.equals(str3)); // true (比的是值)
11         System.out.println(str2.equals(str3)); // true  (比的是值)
12     }
13 }

猜你喜欢

转载自www.cnblogs.com/zhznb/p/9203841.html