天津专业做网站公司,网站建设的优点与不足,音乐网站开发开发,白熊阅读做网站架构作用#xff1a;
基本类型#xff0c;比较值是否相等引用类型#xff0c;比较内存地址值是否相等不能比较没有父子关系的两个对象equals()方法的作用#xff1a;
JDK 中的类一般已经重写了 equals()#xff0c;比较的是内容自定义类如果没有重写 equals()#xff0c;将… 作用
基本类型比较值是否相等引用类型比较内存地址值是否相等不能比较没有父子关系的两个对象equals()方法的作用
JDK 中的类一般已经重写了 equals()比较的是内容自定义类如果没有重写 equals()将调用父类默认 Object 类的 equals() 方法Object 的 equals() 比较使用了 this obj可以按照需求逻辑重写对象的 equals() 方法重写 equals 方法一般须重写 hashCode 方法
一、比较例子
public static void main(String[] args) {//基本数据类型的比较int num1 10;int num2 10;System.out.println(num1 num2); //true//引用数据类型的比较//String类重写了equals方法中与equals的比较String s1 hello;String s2 hello;System.out.println(s1 s2); //true比较地址值内容相同因为常量池中只有一个“hello”所以它们的地址值相同System.out.println(s1.equals(s2));//true比较内容内容相同因为常量池中只有一个“hello”所以它们的地址值相同System.out.println(s1.equals(hello)); //trueString s3 new String(hello);String s4 new String(hello);System.out.println(s3 s4); //false,比较地址值s3和s4在堆内存中的地址值不同System.out.println(s3.equals(s4)); //true比较内容内容相同//没有重写equals方法的类中与equals的比较 People p1 new People();People p2 new People();People p p2;System.out.println(p1);//People135fbaa4System.out.println(p2);//People45ee12a7System.out.println(p); //People45ee12a7System.out.println(p1.equals(p2)); //falsep1和p2的地址值不同System.out.println(p.equals(p2)); //truep和p2的地址值相同}二、重写例子
参照String类,equals的重写如下 public boolean equals(Object anObject) {if (this anObject) {return true;}if (anObject instanceof String) {String anotherString (String)anObject;int n value.length;if (n anotherString.value.length) {char v1[] value;char v2[] anotherString.value;int i 0;while (n-- ! 0) {if (v1[i] ! v2[i])return false;i;}return true;}}return false;}代码解释
1. 若当前对象和比较的对象是同一个对象即return true。也就是Object中的equals方法。 2. 若当前传入的对象是String类型则比较两个字符串的长度即value.length的长度。 3. 若长度不相同则return false。 4. 若长度相同则按照数组value中的每一位进行比较。若不同则返回false。若每一位都相同则返回true。 5. 若当前传入的对象不是String类型则直接返回false。 此外StringBuffer和StringBuilder并没有重写equals方法其比较的还是引用类型的地址。