---------------------- android培训、java培训、期待与您交流!
今天看了毕老师关于equals的视频,对于以前一直很不清楚的.equals与== ,似乎有了点感觉,然后开始试验。
class Person{
private String name;
private int age;
private String work;
public Person(){
}
public Person(String name,int age,String work){
this.setName(name);
this.setAge(age);
this.setWork(work);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setWork(String work) {
this.work = work;
}
public String getWork() {
return work;
}
public boolean equals(Object obj){
if(!(obj instanceof Person)) return false;
else {
Person p=(Person) obj;
if(this.getName()==p.getName()&&this.getAge()==p.getAge()
&&this.getWork()==p.getWork()) return true;
else return false;
}
}
}
public class Equals {
public static void main(String[] args){
Person p1= new Person("zhangsan",12,"student");
Person p2=new Person("zhangsan",13,"student");
System.out.println(p1.equals(p2));
}
通过重新了person类的equals方法,使得可以通过判断属性来判断是否相等而不用去判断地址是否相等。
这个用法是懂了,但是再与==一比较,又晕了 代码如下:
String a="asd";
System.out.println(a.equals("asd"));
System.out.println(a=="asd");
String b=new String("asd");
System.out.println(b.equals("asd"));
System.out.println(b=="asd");
String c=“asd”;
System.out.println(b.equals(c));
System.out.println(b==c);
运行结果是
true
true
true
false
true
false
然后就晕了,感觉后面两个的正确与否感觉跟我期望的是反的呢 然后论坛上发帖 得到帮助
第二次回答这个问题了 其实很简单的 1 相等性的比较 (== ) a 对于原生数据类型来说,比较的是左右两边的值是否相等。 b 对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。 2 equals()方法,该方法定义在Object 类当中,因此Java 中的每个类都具有该方法,对于Object 类的equals()方法来说,它是判断调用equals()方法的引用与传进来的引用是否一致,即这两个引用是否指向的是同一个对象。对于 Object 类的equals()方法来说,它等价于==。 3 对于 String 类的 equals()方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。 对于String 对象的相等性判断来说,请使用equals()方法,而不要使用== 。 |
String a="asd";//直接到String池中去找字符“asd” System.out.println(a.equals("asd"));//内容相同,true System.out.println(a=="asd");//内容、地址都相同,true String b=new String("asd");//new了一个对象,在堆中开辟空间,有了新的地址 System.out.println(b.equals("asd"));//内容相同,true System.out.println(b=="asd");//地址不同,false String c=“asd”;//直接到String池中去找字符“asd” System.out.println(b.equals(c));//内容相同,true System.out.println(b==c);//地址不同,false |
总结:String不是基本数据类型,所以==再判断的时候也要判断地址》。。。。。
-------------------------------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima