java判断byte相等_Java中相等测试
⼀:equals与==的区别
equals不等于(1)基本数据类型
byte,short,char,int,long,float,double,boolean
此类数据类型的⽐较需要使⽤==,此时⽐较的是他们的值,若相等,则返回true,若不同,则返回false;
注:
Integer a =1000;
Integer b=1000;
if (a==b)....
此时返回为false,因为Integer表⽰的不是基本数据类型,⽽是基本类型Int所对应的类,所以此时==⽐较的是对象是否指向同⼀个存储区域。
(2) 类
Object类中的equals⽅法检测的是⼀个对象是否等于另⼀个对象,或者判断两个对象是否引⽤了同⼀个对象;
当对两个对象使⽤==进⾏⽐较时,⽐较的是他们在内存中的存放地址,所以只有同⼀个new出来的对象的两个对象变量⽐较时,才会返回true,否则⽐较的结果即为false。
public classEqualsTest
{public static voidmain(String[] args)
{
Employee alice1= new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee alice2=alice1;
Employee alice3= new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee bob= new Employee("Bob Brandson", 50000, 1989, 10, 1);
System.out.println("alice1 == alice2: " + (alice1 ==alice2));
System.out.println("alice1 == alice3: " + (alice1 ==alice3));
System.out.println("alice1.equals(alice3): " +alice1.equals(alice3));
System.out.println("alice1.equals(bob): " +alice1.equals(bob));
}
//代码来⾃CoreJava
编译结果是:
alice1 == alice2: true//alice1和alice2是同⼀个new出来的两个对象,所以返回true
alice1 == alice3: false//虽然alice1和alice3的对象中的参数相同,但内存中的存放地址不同,所以使⽤==判断结果为false
alice1.equals(alice3): true
alice1.equals(bob): false
Manager carl = new Manager("Carl Cracker", 80000, 1987, 12, 15);
Manager boss= new Manager("Carl Cracker", 80000, 1987, 12, 15);
boss.setBonus(5000);
System.out.println("carl.equals(boss): " + carl.equals(boss));
编译结果:
carl.equals(boss): false
其中Manager是Employee的⼦类,因此Manager对象⽐较,⾸先调⽤超类的equals⽅法,如果检测失败,对象就不可能相等,在此代码中,carl和boss在超类中的域都相等,因此需要⽐较⼦类中的实例域,由于boss.setBonus(5000);的存在,因此实例域不同,所以输出false。
附:CoreJava中推荐的完美equals⽅法建议:
1.显式参数命名的otherObject,需要将它转换成另⼀个叫做other的变量。
2.检测this与otherObject是否引⽤同⼀个对象。
if(this==otherObject)return ture
3.检测otherObject是否为空,如果为空,则返回false。这个很有必要。
4.⽐较this与otherObject是否属于同⼀个类,如果equals的语义在每个⼦类中有所改变,就使⽤getClass进⾏检测。
if(getClass!=otherObject。getClass())return false。如果所有的⼦类都拥有统⼀的语义,就使⽤instanceof检测。
5.将otherObject转换为相应的类类型变量。
6.使⽤==⽐较基本类型域,使⽤quals⽐较对象域。如果所有的域都匹配,就返回true,否则返回false。如果在⼦类中重新定义了equals,就要在其中包含调⽤super.equals(other)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。