Java中的equals和强制类型转换
来源:互联网 发布:实验室洗眼器 淘宝 编辑:程序博客网 时间:2024/05/17 21:53
我们通常是用“==”是比较的两个对象的内存地址,两个对象的内存地址是否相等,但是有些时候我们的比较是对两个对象的内容进行比较,所以使用object的equals方法就不可以了,实际上在JDK中,String和Math等类都对equals方法进行了重写,所以这些类中的比较就是对其内容的比较了。
使用equls的几个性质
1、自反性:对于任何的非空值x,x.equals(x)都是返回的true
2、对称性:非空引用x和y,x.equals(y)返回true有y.equals(x)返回true
3、传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
4、一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
选择合适的比较方式
值得注意的是float和double的比较需要特定的方式
1) 对象域,使用equals方法 。
2) 类型安全的枚举,使用equals或== 。
3) 可能为null的对象域 : 使用 == 和 equals 。
4) 数组域 : 使用 Arrays.equals 。
5) 除float和double外的原始数据类型 : 使用 == 。
6) float类型: 使用Float.foatToIntBits转换成int类型,然后使用==。
7) double类型: 使用Double.doubleToLongBit转换成long类型,然后使用==。
在equals()中使用getClass进行类型判断
package TwoWeek;public class Equal {public static void main(String args[]){ Student e2 = new Student("chenssy"); Person p1 = new Person("chenssy"); System.out.println(p1.equals(e2)); }}class Person{private String name;public Person(String name){this.name = name;} public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean equals(Object object){ if(object.getClass() == Person.class){ // 上面如果使用if(object instanceof Person)结果就会是true了 Person p = (Person) object; if(p.getName() == null || name == null){ return false; } else{ return name.equalsIgnoreCase(p.getName()); //将String与另一个String比较,不考虑大小写 } } return false; } }class Student extends Person{ public Student(String name){ super(name); } }
强制类型转换
- Java中的equals和强制类型转换
- java中的自动类型转换和强制类型转换
- Java中的强制类型转换
- Java中的强制类型转换
- Java中的强制类型转换
- java中的强制类型转换
- Java中的强制类型转换
- Java 中的强制类型转换
- java中的强制类型转换
- Java中的强制类型转换
- Java中的多态 和 强制类型转换
- Java 中的强制类型转换运算符
- Java 中的强制类型转换运算符
- J2SE基础-java中的强制类型转换
- Java中的类型转换与强制类型转换的实现
- C++ 强制类型转换和赋值中的类型转换
- 关于Java和CPP强制类型转换
- java强制类型转换
- Java开发工具简介
- 构造函数的调用
- 运行kettle时出现couldn't create java virtual machine
- java 字节流与字符流的区别(转载)
- struts2——DMI动态调用失败解决方案
- Java中的equals和强制类型转换
- IntelliJ IDEA 2016.1.1 远程调试tomcat
- Unix下5种I/O模型
- AVR Studio中添加两个C文件遇到的问题
- Optional 可选项
- WebView的用法
- QT5新手教程(1)QT5+VS2013
- Redis源码解析:21sentinel(二)定期发送消息、检测主观下线
- iOS-OC中的self.a与_a访问区别简析