== 操纵符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只 能用==操纵符。假如要比较两个引用 是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操纵符进行比较。参考代码a
代码a
String a=new String("abc");
String b=new String("abc");
System.out.println(a==b);
结果:false.........
分析代码a:
两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的内存地址是不同的,即a和b中存储的数值是不相 同的,所以,表达式a==b将返回false
equals()方法是用 于比较两个独立对象的内容是否相同,就比如比较两个人的长相是否相同,它比较的两个对象是独立的。字符串的比较基本上都是使用equals()方法。
代码b
String a=new String("abc"); String b=new String("abc");
System.out.println(a.equals(b));
结果:true.........
分析代码b:
两条new语句创建了两个对象 ,他们的内存地址值是不同的,,,但是 两个对象中的内容是相同的 , 所以表达式a.equals(b)返回true
还有一点需要注意:
假如一个类没有自己定义equals()方法,那么它将继承Object类的 equals()方法,Object类的equals()方法的实现代码如下: boolean equals(Object o){ return this==o; } 这说明,假如一个类没有自己定义equals()方法,它默认的equals()方法(从Object 类继承的)就是使用==操纵符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals()和使用==会得到同样的结果,假如比较的是两个 独立的对象则总返回false。所以你编写了一个类,想比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖Object类的equals()方法
|