java中测试两个变量相等有两种方法:==和equals
1.当使用==时,如果 两个变量是基本数据类型变量,且都是数值类型(不严格要求数据类型相同),则只需要两者的变量的值相等,就返回true
如果 是两个引用类型的变量,他们必须只想指向一个对象时,==判断才会返回true(==不可用于比较类型上没有父子关系的两个变量)
2.当使用equals时,equals是用来比较引用类型值相等的,对于8大基本数据类型,是有重写Objdect中的equals方法
在Object中equals方法和==一样
Object中equals方法
public boolean equals(Object obj) { return (this == obj); }
在8大基本类型中,重写了equals方法
Integer重写Object的equals方法
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
所以对于8大基本类型对应的包装类,我们可以放心的用==来比较对象相等,用equals来比较对象的值相等。8大基本类型我们直接用==比较值是否相等
int i=8; int j=8; System.out.println(i==j);//基本数据类型比较 == Integer a=new Integer(8); Integer b=new Integer(8); System.out.println("a=b:"+(a==b)); //基本类型对应的包装类比较 ==(是否指向同一个对象)
System.out.println("a.equal:"+a.equals(b));//equals 对象的值时候相等
我们知道:所有的类都继承自Object。即使我们自己写的类也是继承自Object,自己写的类在调用equals方法时,实际是调用Object类的equals方法,
但是这个方法和“==”是一样的,都是用来判断对象是否一致,这时我们如何判断对象对应的值是一致呢?
答案是:重写父类的equals方法(这里我们指自定义类的父类Object)
class EqualsTest { public int k; public EqualsTest(int k) { this.k = k; } public boolean equals(EqualsTest test) { if(k==test.k) return true; else return false; } } public class Test { /** * 自定義類,重寫equals方法測試 * @param args */ public static void main(String[] args) { // TeODO Auto-generated method stu EqualsTest testA=new EqualsTest(9); EqualsTest testB=new EqualsTest(9); System.out.println(testA==testB);//false
System.out.println(testA.equals(testB));//true
} }
总结:
1.基本数据类型用 == 比较两个变量的value值是否相等
2.基本类型对应的包装类,用 ==比较两个对象是否相等,用equals比较两个对象的value是否相等
对于自定义类型,用 == 比较两个对象是否相等(同一个对象),通过重的equals方法来实现value(或者其他)是否一致
补充:八大基本数据类型及其包装类
基本数据类型 对应包装类
int Integer
short Short
long Long
String String
boolean Boolean
char Character
float Float
double Double