黑马程序员——无比纠结的==与equals


---------------------- 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值