美文网首页
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方法。

相关文章

  • Java 比较相等

    Java Equals() 特性 Equals() 和 == 的区别 重写Equals方法 重写HashCode方法

  • java 中 String == 原理 equals 和

    == 和equals的区别

  • 【面试1】

    基础 1、equals和==(equals和==的区别)equals:是Object的一个方法,实现对象的比较;复...

  • HashCode和Equals的区别

    HashCode和equals的区别: String方法的equals方法和HashCode方法 String的H...

  • ==和equals

    ==和equals的区别: ==和equals方法都是用来比较两个变量/对象是否相等。 如果没有重写equals方...

  • == 和 equals() 区别

    解释 代码 重写equals方法

  • ==和equals区别

    基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boo...

  • ==和Equals区别

    ==和Equals区别 对于基本数据类型:(byte、short、char、int、float、double、lo...

  • ==和Equals区别

    对于基本数据类型:(byte、short、char、int、float、double、long、boolean),...

  • 微小知识点合集

    1、equals和equalsIgnorecase有什么区别? 在JAVA里面,牵扯到equals和equalsI...

网友评论

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

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