一、java当中"=="和equals的区别
- 基本数据类型:byte、short、char、int、long、double、float、boolean。他们之间的比较,用双等号(==),比较的是他们的值,即内容是否相等。
- 引用数据类型:当应用数据类型用(==)进行比较的时候,比较的是他们在内存中存放的地址(确切的说,是堆内存地址)。
== 的作用:
基本类型:比较的就是值是否相同。
引用类型:比较的就是地址值是否相同。
equals 的作用:
引用类型:默认情况下,比较的是地址值。
public class StringDemo {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2); // true
}
}
上方代码块,用“==”比较s1和s2,返回的结果是 true,比较的是内容是否相同。
public class StringDemo {
public static void main(String args[]) {
String str1 = "Hello";
String str2 = new String("Hello");
String str3 = str2; // 引用传递
System.out.println(str1 == str2); // false
System.out.println(str1 == str3); // false
System.out.println(str2 == str3); // true
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true
System.out.println(str2.equals(str3)); // true
}
}
上方第4行代码中,我们new了一个对象,用“==”比较s1和s2,返回的结果却是 false;而用“equals”比较s1和s2,返回的结果是 true。
为了分析上面的代码,我们必须首先分析堆内存空间和栈内存空间,这一点非常重要:
看完上面的图,再结合上面的代码,就一目了然了。