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 }
中国男儿当自强不息,厚德载物。