java中“equals()”与“==”的不同点和相同点
一、“ == ”的认识
==为运算符。
1、可以作用在基本数据类型的变量,直接比较两者存储的 “值”是否相等;
2、可以作用于引用类型的变量,则比较的是所指向的对象的地址;
基本数据类型包括数值型(整数类型(byte,short,int,long),浮点类型(float,double)),字符型(char)和布尔型(boolean)
int a=10;
int b=10;
System.out.println(a==b);//true
float k=10.0f;
System.out.println(a==k);//true
double l=10.0;
System.out.println(a==l);//true
System.out.println(k==l);//true
boolean flag=true;
System.out.println(flag=true);//true
char i=10;
System.out.println(i==b);//true
char num=67;
char num1='C';
System.out.println(num==num1);//true
Cat cat=new Cat();
Cat cat1=new Cat();
Cat cat2=cat;
System.out.println(cat==cat1);//false
System.out.println(cat==cat2);//true
== 的作用:
基本类型:比较的就是值是否相同
引用类型:比较的就是地址值是否相同
二、“ equals ”的认识
equqls 是一种方法,并不是运算符;equals方法不能作用于基本数据类型的变量;
Java中所有的类都是继承与Object这个基类的,如果没有对Object中equals方法进行重写,比较的是引用类型的变量所指向的对象的地址,反之则比较的是内容。
Object中equals的源码
public boolean equals(Object obj) {
return (this == obj);
}
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;
}
public class Mytest {
public static void main(String[] args) {
Cat cat1 = new Cat();
Cat cat2 = new Cat();
cat1.setName("花花");
cat2.setName("花花");
System.out.println(cat1.equals(cat2));//false
System.out.println(cat1.getName().equals(cat2.getName()));//true
}
}
equals 的作用:
在默认情况下(Object),比较的是地址值;在重写该方法后比较对象的成员变量值是否相同(String,Date,File等都重写了Object中的equals()方法)