equals == 和compare to

来源:互联网 发布:手机淘宝不能照片搜索 编辑:程序博客网 时间:2024/06/05 03:53

1.基础的数据类型可以用==号去进行比较,不能用equals比较

2.==比较的是对象的地址,Object.java里的equals方法内部是用==实现的,因此比较的也是地址。至于String,因为String类是Object类的子类,所以比较的是内容。

String a = "qwe";

String b = "qwe";

如果字符串常量池中存在qwe,则该语句并不会创建对象,只是讲字符串常量池中的引用返回而已。
如果字符串常量池中不存在qwe,则会创建并放入字符串常量池,并返回引用,此时会有一个对象进行创建。

也就是当b=b+1的时候会创建一个对象

String a = b;//这里只是让a这个变量也指向的地址为 1的区域,并没有重新申请内存,因此是地址传递
因此System.out.print(a==b);返回的是TRUE;
String s1 = new String("java");String s2 = new String("java");
因为会生成两个地址,所以
因此System.out.print(S1==S2);返回的是FALSE;equals返回的是TRUE。eql
3.1
compare to比较的前后两个字符串的asc码的差值参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值,如果两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值。
BigDecimal类型的比较用compare to 1是大于,0是等于,-1是小宇,前者大、小、等于、后者。
对于BigDecimal的大小比较,用equals方法的话会不仅会比较值的大小,还会比较两个对象的精确度。
BigDecimal的compare to方法中有个matchScale的处理,意思是把精确度低的那个对象转换为高精确度,然后1.2就回等于1.20,用equals因为会比较精度问题,所以会导致1.2不等于1.20


0 0
原创粉丝点击