`
junzai
  • 浏览: 14511 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

==和equals的区别

阅读更多

/**
* ==和equals的区别
* @author Administrator
*
*/
public class Test {

public static void main(String[] args){

/*两个输出的结果都是true
问题在于String类型的变量,String是放在常量池里的。
一开始我们定义一个a,a指向常量池里的一个aa,后面又定义了一个b,它也指向aa。因为String比较特殊,如果有相同的字符串,
他就不会再去建一个新的String对象了,
所以他们指向同一块内存,当然地址也就相等了*/

String m="aa";
String n="aa";
  
boolean n1=m==n;//==基本类型比较值,类类型比较地址
boolean n2=m.equals(n);//equals:基本类型不能用,类类型比较时不确定

System.out.println("m:n "+n1);
System.out.println("m:n "+n2);

/*对于基本数据类型,==比较值,对于对象,比较内存地址。
equals方法是需要用户重写的,它的行为由我们自己定义,想让它返回什么就返回什么,方法可以重写,想让它比较什么就比较什么。
而之所以我们会认为它比较的是内容,是因为现在jdk中的类重写这个方法,比较的都是内容(如String型:name.equals("王二"))。
*/
int a=10;
int b=10;
Integer c=10;
Integer d=10;

Integer e=new Integer(10);
Integer f=new Integer(10);

boolean n3=a==b;
boolean n4=a==c;
boolean n5=a==e;
boolean n6=c==d;
boolean n7=c==e;
boolean n8=e==f;

System.out.println("a:b "+n3);
System.out.println("a:c "+n4);
System.out.println("a:e "+n5);
System.out.println("c:d "+n6);
System.out.println("c:e "+n7);
System.out.println("e:f "+n8);


}

}

输出的结果是:
m:n true
m:n true
a:b true
a:c true
a:e true
c:d true
c:e false
e:f false
c.equals(d) true
c.equals(e) true
e.equals(f) true
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics