java中==和equals

/**
 * @author zhaojiatao
 * @date 2018/7/19
 */
public class equalsLearn {

    public static void main(String[] args) {

        /**
         * 當基本類型的比較時:只能用==,比較值;
         * 當是引用類型比較時:若是未重寫equals方法,那麼equals用的是來自object類的equals方法,就是==,即比較內存地址
         * 當是String類型時,若是是由String str="xxx";這樣直接賦值的話,比較的是字符串的值;
         *                 若是由String str=new String("xxx");方式new出來的對象的話,比較時是用的String類重寫的equals方法;
         * 注意,toString方法返回的new String()對象;
         *
         */

        int x=1;
        int y=1;

        // 基本類型判斷值是否相等
        System.out.println(x==y);// true

        //java會自動拆箱,由編譯器完成,實際上判斷的是x==1
        System.out.println(x==new Integer(1));// true

        //比較兩個對象的內存地址
        System.out.println(new Integer(1)==new Integer(1));// false

        //使用Integer包裝類重寫的equals方法比較
        System.out.println(new Integer(1).equals(new Integer(1)));//true



        String str1="abc";
        String str2="abc";

        // 比較兩個字符串的值
        System.out.println(str1==str2);// true

        // 比較兩個字符串 使用String類重寫的equeals方法
        System.out.println(str1.equals(str2));// true

        StringBuffer str3=new StringBuffer("efg");
        StringBuffer str4=new StringBuffer("efg");

        // 比較內存地址
        System.out.println(str3==str4);//false
        // 比較內存地址
        System.out.println(str3.equals(str4));// false 因爲StringBuffer類沒有重寫Object類的equals,故比較的是內存地址

        // toString會生成new String()對象
        System.out.println(str3.toString()==str4.toString());//false 比較內存地址
        System.out.println(str3.toString().equals(str4.toString()));//true 使用String對象重寫的equals比較

    }


}
相關文章
相關標籤/搜索