A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我为你着迷 金牌黑马   /  2014-4-2 23:04  /  1460 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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;呀!  我试了下,编译倒是可以通过的,但是运行不聊。麻烦大伙帮忙解答下。谢谢了!

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

9 个回复

倒序浏览
当然不行了,你可能不太清楚this的用法,this.age表示本类的age变量,只写this它又不知道你指的是什么,p.age同理
回复 使用道具 举报
this实际是对象的地址
回复 使用道具 举报
能够改成this==p,并且编译运行都能通过。但是,这样做就不能比较两个人的年龄了。
this关键字代表当前类的对象,p是person的另一个对象,比较的是两个对象的地址,所以返回值一定是fals
回复 使用道具 举报 1 0
Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。
在你代码中this指的就是就是你Person类的对象引用,你用它和另一个你new出来的Person对象比较,内存地址肯定是不一样的
回复 使用道具 举报
因为boolean b=p1.compare(p2);
所以this指的就是P1,P指的是P2 如果this==P就是P1==P2两个没法比较的,只有age年龄数字才好比较
回复 使用道具 举报
谢谢大家!
回复 使用道具 举报
return this.age==p.age;  是因为对象中的引用的age赋值给了当前对象的age,但是如果是return this==p;的话就是说把引用赋值给了对象,this其实代表的还是对象,这样根本说不过去,所以这个思想就是不打正确的,所以考虑好思想很重要,我也在逐渐加强自己的逻辑思维,代码只是体现思想的一种形式而已。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
姜姗姗 发表于 2014-4-8 21:47
return this.age==p.age;  是因为对象中的引用的age赋值给了当前对象的age,但是如果是return this==p;的话 ...

谢谢你 亲  
回复 使用道具 举报

嗯哼,没事儿,我现在也在传智,共同进步,共同提高嘛
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马