==
引用数据类型变量用==号:
总结:引用数据类型的变量放在栈中;存的内容是首地址,所以用==号进行比较引用数据类型的变量就是比较首地址的值
基本数据类型用==进行比较:
总结:不管是引用数据类型还是基本数据类型用==比较的都是变量里面存储的内容
equals:
Java一切源于对象,Object类是所有类的父类,equals是object中的一个方法,所以说所有的类都可以调用object里的东西,所有的类也都可以对object类中的方法进行重写
引用数据类型用equals进行比较时
package com.sxt.entity;
public class Student {
private String name;
public Student(String name){
this.name=name;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
public class Equals {
public static void main(String[] args){
Student s1=new Student("张三");
Student s2=new Student("李四");
System.out.println(s1.equals(s2));
}
}
对象之间的equals比较在Jdk中的源代码为:
谁调用equals这个方法this就指向谁,object指向的是所传的参数,最终还是比较他们里面所存的内容public boolean equals(Object obj) { return (this == obj); }
是不是指向同一块内存空间
String类型的数据,用equals比较时候的例子:
package com.sxt.entity; public class Student { private String name; public Student(String name){ this.name=name; } public void setName(String name){ this.name=name; } public String getName(){ return name; } }
String类型的内容用equals进行比较在JDK中的源码是:package com.sxt.entity; public class Equals { public static void main(String[] args){ Student s1=new Student("张三"); Student s2=new Student("李四"); System.out.println(s1.getName().equals(s2.getName())); } }
public boolean equals(Object anObject) { if (this == anObject) {//this和传过来的参数是否指向同一块内存如果指向同一块内存则内容相等 return true; }
/*
return obj.name.equals(this.name);
//在这句话之前没有进行类型强转,所以报错了报错的内容是:name cannot be resolved or is not a field
*/ if (anObject instanceof String) {//看anobject的类型是不是String类型的, String anotherString = (String)anObject;//是String类型的进行强转才有意义
可以对object(父)类的equals根据自己的需要进行重写://如果想进行下一步的比较,必须强转为同一类型的不然不能进行比较。 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就是方法结束了 } } return false; }
public boolean equals(Object obj) { if(this==obj){ return true; } if(obj instanceof Student){ Student s=(Student)(obj); return s.name.equals(this.name); } return false; }
getClass():
调用:对象名.getClass();
instanceof:
toString: