==是一个比较运算符
- ==:既可以判断基本类型,又可以判断引用类型。
- ==:如果判断基本类型,判断的是值是否相等。
- ==:如果判断的是引用类型,判断的是地址是否相等,即判断是不是同一对象。
- equals:是object类中的方法,只能判断引用类型。
- 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。(具体可查看jdk源码)。
是object类中的方法
java类都可以使用
不可以可以,默认判断的是地址是否
相等,子类中往往重写该方法,
用于判断内容是否相等。
//JDK源码Object类中的equals方法 //Object类中的equals方法默认就是比较对象地址是否相同,也就是判断两个对象是否是同一对象。 public boolean equals(Object obj) { return (this == obj);//此时的==就是在判断引用类型,判断地址是否相等。 } //JDK源码String类的equals方法 //String是object的子类,将equals方法重写,变成了比较两个字符串是否相同 public boolean equals(Object anObject) { if (this == anObject) {//如果是同一个对象 return true;//返回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;//如果两个字符串的所有字符都相等,返回true } } return false;//如果比较的不是字符串,直接返回false; } //JDK源码Integer类也重写了Object的equals方法 public boolean equals(Object obj) { if (obj instanceof Integer) {//判断类型 return value == ((Integer)obj).intValue();//判断两个值是否相等。 } return false; }
package com.study.srv.demo4; public class Demo01 { public static void main(String[] args) { N a = new N(); N b=a; N c=b; System.out.println(a==c);//true,比较引用类型,同对象 System.out.println(b==c);//true,比较引用类型,同对象 M d=a; System.out.println(d==c);//true,比较引用类型,同对象 int num1=10; double num2=10.0; System.out.println(num1==num2);//true,基本数据类型,判断值是否相等 // String str1 = new String("jack");//String类 String str2 = new String("jack"); System.out.println(str1==str2);//此时是判断是否是同一对象,false。 System.out.println(str1.equals(str2));//判断比较字符串是否相等,true。 Integer int1 = new Integer(100);//Integer类 Integer int2 = new Integer(100); System.out.println(int1==int2);//此时是判断是否是同一对象,false。 System.out.println(int1.equals(int2));//判断两值是否相等,true。 } } class M{} class N extends M{}
package com.study.srv.demo4; public class Demo01 { public static void main(String[] args) { M m1 = new M(); m1.name="jack"; M m2 = new M(); m2.name="jack"; System.out.println(m1==m2);//此时的==是判断的是引用类型,判断的是地址是否相等。所以false System.out.println(m1.equals(m2));//此时的equals调的是Object类的equals方法,值判断是否是同一对象,所以false System.out.println(m1.name.equals(m2.name)); //此时的equals因为name属性是String类型,所以调的是String类中的equals方法, // 先判断是否是同一对象,如不是在判断字符串的值是否相等,所以true。 } } class M{ public String name; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)