1. 程式人生 > >java中==和equals

java中==和equals

tr1 ring author string類型 print nbsp als 方法 date

/**
 * @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比較 } }

java中==和equals