如下代码:class 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 = per2; //传递到方法中的对象,为per2
if(p1 == p2){ //首先比较两个地址是否相等
return true;
}
//分别判断每个属性是否相等
if(p1.name.equals(p2.name)&&p1.age == p2.age){
return true;
}else{
return false;
}
}.... //此处省略setter和getter代码
}
public class Demo {
public static void main(String[] args){
Person per1 = new Person("Riku",30);
Person per2 = new Person("Hiku",30);
if(per1.compare(per2)){ //进行对象比较
System.out.println("相等!");
}else{
System.out.println("不等!");
}
}
}
请问,用new关键字来实例化对象的时候,不是新建立了堆内存空间么?那么在对比的时候两者地址的时候怎么可能返回true值呢?
再有就是,主方法内的if(per2.compare(per2))和方法compare(Person per)中的调用关系我看不懂.值知道是将per1和per2分别调用到p1和p2里边了!可是具体的类图应该是怎样的?谢谢帮忙解答的大大!
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 = per2; //传递到方法中的对象,为per2
if(p1 == p2){ //首先比较两个地址是否相等
return true;
}
//分别判断每个属性是否相等
if(p1.name.equals(p2.name)&&p1.age == p2.age){
return true;
}else{
return false;
}
}.... //此处省略setter和getter代码
}
public class Demo {
public static void main(String[] args){
Person per1 = new Person("Riku",30);
Person per2 = new Person("Hiku",30);
if(per1.compare(per2)){ //进行对象比较
System.out.println("相等!");
}else{
System.out.println("不等!");
}
}
}
请问,用new关键字来实例化对象的时候,不是新建立了堆内存空间么?那么在对比的时候两者地址的时候怎么可能返回true值呢?
再有就是,主方法内的if(per2.compare(per2))和方法compare(Person per)中的调用关系我看不懂.值知道是将per1和per2分别调用到p1和p2里边了!可是具体的类图应该是怎样的?谢谢帮忙解答的大大!
2、per1.compare(per2) 的意思是调用了per1这个对象的compare方法。传入的值是per2对象的引用
3、你给的这段代码是不会编译通过的(Person p2 = per2;)
Person p = new Person("Riku",30);
p.compare(p) //此时==判断成立。
这只是调用了per1对象上的compare方法,送进去的是per2参数。
这只是方法调用,就不要上升到类图这个层面了。
Person p2 = per2这句有问题的,因为方法里面都不存在per2这个对象的定义,所以编译无法通过。
改为:Person p2 = per;if(per2.compare(per2))和方法compare(Person per)
前面一个是说用per2这个对象去调用他实例里面的compare方法,传入的参数是per2(即:把per2跟per2比较,自己跟自己比较当然在判断内存地址的时候就相等了撒)后面一个是方法的定义,定义一个名为compare的方法,需要传入的参数类型为Person
/*
了解this表示当前对象作用
*/
class Person{
private String name;
private int age;
public Person(String name, int age){
this.setName(name);
this.setAge(age);
}
public void setName(String n){
name = n;
}
public void setAge(int a){
age = a;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public boolean compare(Person per){
//调用此方法时里边存在两个对象:当前对象, 传入的对象
Person p1 = per; //表示当前调用方法的对象为per1
Person p2 = this; //传递到方法中的对象,为per2
if(p1 == p2){ //首先比较两个地址是否相等
return true;
}
//分别判断每个属性是否相等
if(p1.name.equals(p2.name)&&p1.age == p2.age){
return true;
}else{
return false;
}
}
}
public class Demo {
public static void main(String[] args){
Person per1 = new Person("Riku",30);
Person per2 = new Person("Hiku",30);
if(per2.compare(per1)){ //进行对象比较
System.out.println("相等!");
}else{
System.out.println("不等!");
}
}
}
但是后边一个语句是if(per1.conpare(per2))而不是per2.compare(per2)).比是per2和per2比较,而是per1和per2相比较!
里的name值改成和上边一样就相等了!
方法compare中的判断句式是先判断地址是否相同,如果不同再向下判断每个属性是否相等!而不是判断地址返回的true值!谢谢大家...