String类型中的equals和==的使用
时间:2010-09-16 来源:JavaByJun
equals比较的是两个对象的引用指向的地址是否相等(没被重写前)
== 比较的也是两个对象的引用的地址是否相等,并非其内容
Person2 p1 = new Person2("JUN", 25);
Person2 p2 = new Person2("JUN", 25);
Person2 p3 = p1;//表示p1的另一个名称是p3而已
System.out.println(p1.equals(p2));
System.out.println(p1.equals(p3));
System.out.println("p1 == p2:"+ (p1 == p2));
System.out.println("p1 == p3:"+(p1 == p3));
运行的结果为:
false
true
p1 == p2:false
p1 == p3:true
在object类下即equals方法还没有被重写前,equals和==比较的都是两个对象的引用的地址是否一样。而equals方法是可以被重写的,可以重写成判断两个对象的引用的内容是否相等。
重写equals方法:
public boolean equals(Object obj) { |
二、String类型中的equals方法和==的使用
1、有2种办法可以去创建String的对象
1)String str= new String(“JUN”);(通过new构造器的方法)
2)String str2 = “JUN”;(通过普通语法)
String str = “JUN”;
String str2 = “JUN;
System.out.println(str == str2);
程序在运行的时候会创建一个字符串缓冲池当使用 str2 = "JUN" 这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第一个程序中,str1先被放到了池中,所以在str2被创建的时候,程序找到了具有相同值的 s1, 将s2引用s1所引用的对象"JUN"。(str和str2由于内容相同,那么都是指向同一个地址)
所以,比较的是2个对象的栈的地址是否一样,内容是存放在栈的空间里面去,只要内容相等,那么栈的空间就相等,结果为true。String str3 = new String(“JUN”);
String str4 = new String(“JUN”);
System.out.println(str3 == str4);
通过new构建字创建的新对象,是直接告诉程序要新的对象,而不是指向已存在的,值相同但是地址不相同。
所以,比较的是2个对象的堆的地址是否一样,内容eric是分别存放在str3和str4的引用里面去,相当于堆的地址空间。结果为false。
String str5 = “JUN”;
System.out.println(str5 == str6);
一个是存放在栈的空间,一个是存放在堆的空间,结果为false
在String类型中使用equals方法进行比较的都是比较内容是否相等,而 == 比较的是对象内容还是地址则要看其对象的创建方法,要是普通方法创建的就比较的是内容,要是通过new构造器创建的则是比较器对象的地址。