J2SE----equals()与==的区别

    xiaoxiao2021-03-25  67

    Demo

    基本类型

    public class ObjectDemo { public static void main(String[] args) { //基本类型 int a=57; int b=67; int c=124; int d=124; System.out.println(a==b); System.out.println((a+b)==c); System.out.println(c==d); } }

    运行结果: 注:基本类型时,==比较的是值是否相等。

    引用类型

    public class ObjectDemo { public static void main(String[] args) { //引用类型 ==与equal的区别 String s1=new String("hello"); String s2=new String("world"); String s3=new String("helloworld"); String s4=new String("helloworld"); System.out.println(s1==s2); System.out.println((s1+s2)==s3); System.out.println(s3==s4); System.out.println("-----------"); System.out.println(s1.equals(s2)); System.out.println(s3.equals(s1+s2)); System.out.println(s3.equals(s4)); } }

    运行结果: 注:引用类型:==比较的是值地址是否相等,而equals()比较的是值是否相等!

    结果分析:

    ==:s1、s2、s3、s4像这种new出来的(即通过基本类的构造函数赋值的),最开始在堆中分配4个不同的内存空间,用于存放其在常量池中返回的地址,其在堆中地址自然完全不同;而s1和s2在拼接时,会先在常量池中开辟一个新空间,在进行拼接。三个比较地址都不同,所以均为false!equals():s1、s2、s3、s4像这种new出来的(即通过基本类的构造函数赋值的),最开始在堆中分配4个不同的内存空间,其地址自然完全不同;但是equals()比较的是类对象值是否相等。所以结果为false、true、true!

    自动拆箱、int与Integer比较方法

    public class ObjectDemo { public static void main(String[] args) { //Integer做四则运算的自动拆箱 int与Integer类型比较时比较方法 int i=57; Integer i1=new Integer(57); Integer i2=new Integer(67); Integer i3=new Integer(124); Integer i4=new Integer(124); System.out.println(i==i1); System.out.println(i1==i2); System.out.println((i1+i2)==i3); System.out.println(i3==i4); } }

    运行结果:

    注:

    两个Integer类型对象在做四则运算时会先进行自动拆箱,将Integer拆箱成int类型数据,然后做四则运算。int类型与Integer对象比较时会将Integer对象自动拆箱成int类型数据,然后比较值大小,相同则返回true。Integer对象与Integer对象做比较时是直接比较值地址。

    结果分析:由以上可知,true、false、true,false。对于第三个输出结果为true是因为,i1,i2自动拆箱做加法后类型为int,int类型与Integer对象作比较如上注2,则结果为true。

    总结

    ==: 基本类型:==比较的是值得大小。 引用类型:比较的是值地址是否相同equals(): 默认情况:即object类中equals()方法比较的是地址是否相同。 重写equals():象Integer、Double、String等类都是重写了equals()方法的,这种情况下equals()是比较的是值是否相同。

    参考

    自动拆箱、自动装箱见: http://blog.csdn.net/ZhouHuoCleverset/article/details/61676472#t5 String s=new String(“hello”)与String s=”hello”的区别?即new出来与直接赋值的区别请参考: http://blog.csdn.net/zhouhuocleverset/article/details/61935578

    转载请注明原文地址: https://ju.6miu.com/read-37549.html

    最新回复(0)