黑马程序员技术交流社区

标题: 关于this应用的问题 [打印本页]

作者: 我为你着迷    时间: 2014-4-2 23:04
标题: 关于this应用的问题
  1. //需求:比较人的年龄是否相同。


  2. class Person
  3. {
  4.      
  5.               private String name;
  6.               private int age;
  7.               Person(int age)
  8.               {
  9.                  this.age=age;
  10.               }
  11.              
  12.               public  boolean compare(Person p)
  13.       {
  14.           return this.age==p.age;
  15.       }
  16. }


  17. class PersonDemo2
  18. {
  19.                 public static void main(String[] args)
  20.                 {
  21.      Person p1=new Person(20);
  22.      Person p2=new Person(25);
  23.      boolean b=p1.compare(p2);
  24.      System.out.println(b);
  25.                   
  26.                 }
  27. }            
复制代码
大家好! 我的问题是return this.age==p.age;可不可以写成return this==p;呀!  我试了下,编译倒是可以通过的,但是运行不聊。麻烦大伙帮忙解答下。谢谢了!

作者: 马年出黑马    时间: 2014-4-2 23:09
当然不行了,你可能不太清楚this的用法,this.age表示本类的age变量,只写this它又不知道你指的是什么,p.age同理
作者: 马年出黑马    时间: 2014-4-3 06:50
this实际是对象的地址
作者: 四川男人    时间: 2014-4-3 09:29
能够改成this==p,并且编译运行都能通过。但是,这样做就不能比较两个人的年龄了。
this关键字代表当前类的对象,p是person的另一个对象,比较的是两个对象的地址,所以返回值一定是fals
作者: Engle    时间: 2014-4-3 13:37
Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。
在你代码中this指的就是就是你Person类的对象引用,你用它和另一个你new出来的Person对象比较,内存地址肯定是不一样的
作者: 匡辉    时间: 2014-4-3 15:29
因为boolean b=p1.compare(p2);
所以this指的就是P1,P指的是P2 如果this==P就是P1==P2两个没法比较的,只有age年龄数字才好比较

作者: 我为你着迷    时间: 2014-4-3 18:17
谢谢大家!
作者: 姜姗姗    时间: 2014-4-8 21:47
return this.age==p.age;  是因为对象中的引用的age赋值给了当前对象的age,但是如果是return this==p;的话就是说把引用赋值给了对象,this其实代表的还是对象,这样根本说不过去,所以这个思想就是不打正确的,所以考虑好思想很重要,我也在逐渐加强自己的逻辑思维,代码只是体现思想的一种形式而已。
作者: 我为你着迷    时间: 2014-4-8 23:24
姜姗姗 发表于 2014-4-8 21:47
return this.age==p.age;  是因为对象中的引用的age赋值给了当前对象的age,但是如果是return this==p;的话 ...

谢谢你 亲  
作者: 姜姗姗    时间: 2014-4-8 23:32
我为你着迷 发表于 2014-4-8 23:24
谢谢你 亲

嗯哼,没事儿,我现在也在传智,共同进步,共同提高嘛




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2