java的equal方法,==比較。以及“”和null的區別


equals方法和 ‘==’的區別


在面試中,經常會問的問題;

Java編程思想中說到 “關系操作符生成的是一個boolean結果,它們計算的是操作數的值之間的關系”。簡單點來說,“==”相比較值是否相等。

可以這樣理解,基本數據類型定義生成在棧內存中,那么在比較的時候,比較的值,所以,只要值相等,那么結果就為true。而String相比較的時候,String為引用數據類型,生成對象的時候,存放在堆內存中,在棧內存中放的是堆內存地址的引用,所以即使值是相等的,但是比較的地址是不相等的。結果為false。

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        int n=3;
        int m=3;
        
        System.out.println(n==m);
        
        String str = new String("hello");
        String str1 = new String("hello");
        String str2 = new String("hello");
        
        System.out.println(str1==str2);
        
        str1 = str//將str的地址賦值給str1
        str2 = str;//將str的地址賦值給str2
        System.out.println(str1==str2); //因為比較的是地址,而兩個的地址都是str的地址,所以為true
    }

}
================
    結果為: true false true

判斷兩個字符串是否相等的時候,是否可以出現字符串為空的情況:

public class StringEqual {
    public static void main(String[] args) {
        StringEqual stringEqual = new StringEqual();
        String a = "hello";
        String b;
        stringEqual.func(a,b); //沒有定義的時候,在啟動的時候直接報錯,代碼有誤,必須初始化值菜能比較
    }
    public boolean func(String a , String b){
        return (a.equals(b));
    }
}

public boolean equals(Object anObject) {//name2傳入equals方法,anObject指向name2,name2是上轉型對象
    if (this == anObject) {//this代指調用equals方法的name1,name1和name2地址不一樣,繼續向下運行
        return true;
    }
    if (anObject instanceof String) {//此處用於判斷name2是否是String類或其子類,此處是,繼續運行
        String anotherString = (String)anObject;//對象下轉型
        int n = value.length;//在編譯器中可看出value是全局變量,其前存在省略掉的this(即n = this.value),用於測量name1的長度
        if (n == anotherString.value.length) {//判斷name1和name2指向的字符串長度是否相等,此處相等,繼續運行
            char v1[] = value;//將name1指向的字符串存入字符數組v1
            char v2[] = anotherString.value;//將name1指向的字符串存入字符數組v2
            int i = 0;
            while (n-- != 0) {//利用循環,逐字符比對兩字符串,若有任何不同,返回false,否則返回true
                if (v1[i] != v2[i])
                    return false;
                    i++;
            }
            return true;	
        }
    }
        return false;
}


""和null的區別:

null是沒有地址
""是有地址但是里面的內容是空的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM