java 判断byte相等_Java中相等测试

一: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)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值