美文网首页
equals和==的区别

equals和==的区别

作者: 零下的雨 | 来源:发表于2018-11-27 15:42 被阅读0次

    通过以下代码,能看出来equals和==的区别:

    /*
    
    
     */
    public class TestEquals {
        public static void main(String[] args) {
            //用equals、==去比较String变量
            //两个String变量内容相同
            String abc = "111";
            String cba = "111";
            //把abc的值赋值给def
            String def=abc;
            System.out.println("两个string变量内容相同,使用==比较结果为true:"+(abc == cba));
            System.out.println("两个string变量内容相同,使用equals比较结果为true:"+(abc.equals(cba)));
            System.out.println("把一个String变量赋值给另一个String变量,使用==比较结果为true:"+(abc == def));
            System.out.println("把一个String变量赋值给另一个String变量,使用equals比较结果为true:"+abc.equals(def));
    
            /*
            总结:创建String变量时,在内存中创建一个引用地址和一个值的地址,引用地址指向值的地址,
            两个变量值相同,值的地址相同,引用地址都指向值的地址,所以用==和equals比较两个相同值的变量结果都为true
             */
    
    
            //用equeals、==去比较int变量
            int ghi = 1;
            int jkl = 1;
    
            System.out.println("两个int变量内容相同,使用==比较结果为true:"+(ghi == jkl));
            //整型变量不能用equals来比较,编译器会报错
    //        if(ghi.equals(jkl)){
    //            System.out.println("");
    //        }
    
            //用equals、==去比较两个相同内容的对象
            String mno = new String("123");
            String pqr = new String("123");
            String stx = mno; //stx等于mno的值
            String zyz = "123";
            System.out.println("两个对象的内容相同,内存地址不相同,使用==比较的是内存地址,结果为false:"+(mno == pqr));
            System.out.println("两个对象的内容相同,内存地址不相同,使用equals比较的是内容,结果为true:"+(mno.equals(pqr)));
            System.out.println("对象赋值给另一个对象,对象的内存地址和内容都相同,使用==比较执行结果为true:"+(stx == mno));
            System.out.println("对象赋值给另一个对象,对象的内存地址和内容都相同,使用equals比较执行结果为true:"+(stx.equals(mno)));
            System.out.println("创建一个变量,值等于对象的内容,使用==比较变量和对象,因为变量的引用地址和对象的内存地址不同结果为false:"+(zyz == mno));
            System.out.println("创建一个变量,值等于对象的内容,使用equals比较变量和对象,因为变量的值地址和对象的值地址相同结果为true:"+(zyz.equals(mno)));
    
    
            /*
            总结:使用==比较的是内存地址,使用equals比较的是内容,内容也有地址,相同的内容,内存会给开辟相同的地址
             */
    
            //自定义一个类,创建类的实例并给属性赋值,值相同
            Users users=new Users("qinzhenxia","28");
            Users users1=new Users("qinzhenxia","28");
    
            System.out.println("自定义类,创建不同的对象,内容相同,因内存地址不同使用==比较结果为false:"+(users == users1));
            System.out.println("自定义类,创建不同的对象,内容相同,因object类下的equals方法是用==比较的内存地址,所以使用equals比较结果为false:"+(users.equals(users1)));
    
            //自定义一个类,创建类的实例并给属性赋值,值相同,该类重写了equals方法
            UsersTwo usersTwo=new UsersTwo("qinzhenxia","28");
            UsersTwo users1Two=new UsersTwo("qinzhenxia","28");
    
            System.out.println("自定义类,创建不同的对象,内容相同,因内存地址不同使用==比较结果为false:"+(usersTwo == users1Two));
            System.out.println("自定义类,创建不同的对象,内容相同,重写object类下的equals方法,比较内容所以使用equals比较结果为true:"+(usersTwo.equals(users1Two)));
    
            /*
            总结:
                        Object类的equals方法的实现代码如下:
                     boolean equals(Object  o){
                     return  this==o;
                      }
              该方法是用 == 比较的,比较的是对象的内存地址而不是内容地址,
              所以如果自定义的类不重写object时,使用==和equals比较的结果是一样的,都会是false。          
              String类为什么可以用equals比较对象的内容能够成功呢?因为String类也重写了object的equals方法!
              
             */
        }
    }
    
    
    

    重写equals方法,在类中用alt+Insert快捷键就能重写equals方法。

    相关文章

      网友评论

          本文标题:equals和==的区别

          本文链接:https://www.haomeiwen.com/subject/peigqqtx.html