1. 程式人生 > 其它 >Java面試題(三):==和equals比較

Java面試題(三):==和equals比較

1.==和equals比較

==對比的是棧中的值,是判斷兩個變數或者例項是不是指向同一個記憶體空間

而equals是判斷兩個變數或者例項指向同一個記憶體空間的值是不是相同

object中equals中預設也是採用==,通常會重寫

object:

String:

從上面程式碼可以看出,String類中被複寫的equals()方法其實是比較兩個字串的內容。

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 } }

str1 == str2,因為new String("Hello")是重新開闢了一個地址,和str1地址不同,所以結果為false。

基本資料型別存放位置有所改動:

JDK1.6及以前,常量池在方法區,這時的方法區也叫做永久代;
JDK1.7的時候,方法區合併到了堆記憶體中,這時的常量池也可以說是在堆記憶體中;
JDK1.8及以後,方法區又從堆記憶體中剝離出來了,但實現方式與之前的永久代不同,這時的方法區被叫做元空間,常量池就儲存在元空間。