问题提出
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()) ; // 取得信息 } };
- 对应的运行结果
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 } };
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("两个对象不相等!") ; } } };