yuxishua

博客园 首页 联系 订阅 管理

问题提出

1.

    class Person{		// 定义Person类
    	private String name ;		// 姓名
    	private int age ;			// 年龄
    	public Person(String name,int age){	// 通过构造方法赋值
    		name = name ;
    		age = age ;
    	}
    	public String getInfo(){	// 取得信息的方法
    		return "姓名:" + name + ",年龄:" + age ;
    	}
    };
    public class ThisDemo01{
    	public static void main(String args[]){
    		Person per1 = new Person("张三",33) ;	// 调用构造实例化对象
    		System.out.println(per1.getInfo()) ;	// 取得信息
    	}
    };

    2.

    class Person{		// 定义Person类
    	private String name ;		// 姓名
    	private int age ;			// 年龄
    	public Person(String name,int age){	// 通过构造方法赋值
    		this.name = name ; // 为类中的name属性赋值
    		this.age = age ;// 为类中的age属性赋值
    	}
    	public String getInfo(){	// 取得信息的方法
    		return "姓名:" + name + ",年龄:" + age ;
    	}
    };
    public class ThisDemo02{
    	public static void main(String args[]){
    		Person per1 = new Person("张三",33) ;	// 调用构造实例化对象
    		System.out.println(per1.getInfo()) ;	// 取得信息
    	}
    };
    对应的运行结果
image

3,this表示当前对象

当前对象,当前正在调用方法的对象,例如审判犯人,不管被告席做的是张三还是李四,只要是坐在被告席的人,就是犯人。

class Person{		// 定义Person类
	public String getInfo(){	// 取得信息的方法
		System.out.println("Person类 --> " + this) ; // 直接打印this
		return null ; // 为了保证语法正确,返回null
	}
};
public class ThisDemo06{
	public static void main(String args[]){
		Person per1 = new Person() ;	// 调用构造实例化对象
		Person per2 = new Person() ;	// 调用构造实例化对象
		System.out.println("MAIN方法 --> " + per1) ;	// 直接打印对象
		per1.getInfo() ;	// 当前调用getInfo()方法的对象是per1
		System.out.println("MAIN方法 --> " + per2) ;	// 直接打印对象
		per2.getInfo() ;	// 当前调用getInfo()方法的对象是per2
	}
};
image
4.可以使用this和引用传递判断两个对象是不是相等
需要解决两个问题
  • 如何比较,ThisDemo07实现
  • 在哪里比较ThisDemo08实现完全
class Person{		// 定义Person类
	private String name ;	// 姓名
	private int age ;		// 年龄
	public Person(String name,int age){
		this.setName(name) ;
		this.setAge(age) ;
	}
	public void setName(String name){	// 设置姓名
		this.name = name ;
	}
	public void setAge(int age){		// 设置年龄
		this.age = age ;
	}
	public String getName(){
		return this.name ;
	}
	public int getAge(){
		return this.age ;
	}
};
public class ThisDemo07{
	public static void main(String args[]){
		Person per1 = new Person("张三",30) ;	// 声明两个对象,内容完全相等
		Person per2 = new Person("张三",30) ;	// 声明两个对象,内容完全相等
		// 直接在主方法中依次取得各个属性进行比较
		if(per1.getName().equals(per2.getName())&&per1.getAge()==per2.getAge()){
			System.out.println("两个对象相等!") ;
		}else{
			System.out.println("两个对象不相等!") ;
		}
	}
};

以上问题是在主方法中比较,要把比较方法写到Person类中,该怎么办呢?

class Person{		// 定义Person类
	private String name ;	// 姓名
	private int age ;		// 年龄
	public Person(String name,int age){
		this.setName(name) ;
		this.setAge(age) ;
	}
	public boolean compare(Person per){
		// 调用此方法时里面存在两个对象:当前对象、传入的对象
		Person p1 = this ;	// 当前的对象,就表示per1
		Person p2 = per ;	// 传递进来的对象,就表示per2
		if(p1==p2){	// 判断是不是同一个对象,用地址比较
			return true ;
		}
		// 之后分别判断每一个属性是否相等
		if(p1.name.equals(p2.name)&&p1.age==p2.age){
			return true ;	// 两个对象相等
		}else{
			return false ;	// 两个对象不相等
		}
	}
	public void setName(String name){	// 设置姓名
		this.name = name ;
	}
	public void setAge(int age){		// 设置年龄
		this.age = age ;
	}
	public String getName(){
		return this.name ;
	}
	public int getAge(){
		return this.age ;
	}
};
public class ThisDemo08{
	public static void main(String args[]){
		Person per1 = new Person("张三",30) ;	// 声明两个对象,内容完全相等
		Person per2 = new Person("张三",30) ;	// 声明两个对象,内容完全相等
		// 直接在主方法中依次取得各个属性进行比较
		if(per1.compare(per2)){
			System.out.println("两个对象相等!") ;
		}else{
			System.out.println("两个对象不相等!") ;
		}
	}
};
posted on 2015-01-21 10:34  yuxishua  阅读(152)  评论(0编辑  收藏  举报