java中==和equals

Posted 进一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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比较

    }


}

 

以上是关于java中==和equals的主要内容,如果未能解决你的问题,请参考以下文章

Java习惯用法总结

如何在 python 中并行化以下代码片段?

Java之equals和==区别

面试点:Java 中 hashCode() 和 equals() 的关系

java equals 和 == 区别

Java 中 equals 和 == 的区别