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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zdrain 中级黑马   /  2013-11-3 21:08  /  1252 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public Circle compare(Circle cir)
{
if(this.radius>cir.radius)
return this;
return cir;
}
问题是,函数返回的是Circle的对象,return cir;是返回cir这个引用,这样也可以吗?不是应该返回new cir();吗?
还有就是,this代表对象的引用还是对象?this 跟cir是一个意思还是跟new cir()一个意思?

困扰死我了。。。

评分

参与人数 1技术分 +1 收起 理由
To + 1 神马都是浮云

查看全部评分

8 个回复

倒序浏览
调用这个函数的就是一个Circle的类型的对象,this代表的就是这个对象。
Circle cir的意思是传入一个Circle类型的对象cir。当然返回的是对象
回复 使用道具 举报
if(this.radius>cir.radius)
return this;
}
return cir;
这是两个Circle类对象比较,一个对象调用了这个方法,也就是this。去和cir比较。哪个大返回哪个。你那个应该是写错了
回复 使用道具 举报
Circle cir其实与构造函数里边的参数一样,只不过是把参数类型换成了Circle,而变量换成了一个对象的引用。
你把cir看成一个特殊的变量的话,就能够理解为什么返回cir了。
this在成员方法当中的时候,哪个对象调用这个方法,this就代表哪个对象。
所以this代表的就是调用compare方法的Circle类型的对象。

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. package test;


  2. public class CircleTest {

  3.         public static void main(String[] args) {

  4.                  Circle c1=new Circle(6);
  5.                  System.out.println(c1);
  6.                  Circle c2=new Circle(4);
  7.                  System.out.println(c2);
  8.                  /*c1,c2都是Circle对象
  9.                   * Circle compare(Circle cir)方法是 Circle对象
  10.                   * 内部的方法,也就是 c1,c2都有这个函数,谁调用这个函数,
  11.                   * 这个函数中的this.指的就是谁,cir 就是compare()
  12.                   * 括号中的那个.
  13.                   *
  14.                   * 而且,调用这个函数后,有一个结果返回来,数据类型还是
  15.                   * 函数中声明的Circle 型,也就是说,返回的要么是调用者
  16.                   * 本身,要么是参数.
  17.                   * 这里打印的是Circle对象的地址值,如果想要其他效果可以
  18.                   * 重写toStrint()方法.这里不演示
  19.                   * */
  20.                  System.out.println(c1.compare(c2));//c1调用了 Circle compare(Circle cir)方法
  21.                  System.out.println(c1.compare(c2).radius); //这里打印了Circle对象中的变量值
  22.         
  23.         }
  24.         
  25.         }
  26.                


  27. class Circle {
  28.         
  29.         int a;
  30.         int radius;
  31.         
  32.         Circle(int r ){
  33.                
  34.                 radius=r;
  35.                
  36.         }
  37.         
  38.         public Circle compare(Circle cir) {
  39.                 /*
  40.                  * 函数的定义格式,权限public+返回值类型Circle+函数名compare(参数类型),
  41.                  * 这里和同类比,所以是Circle 类型
  42.                  * 这里的意思是  用这个函数和一个Circle对象比完后,返回一个Circle对象.
  43.                  * */
  44.                 if (this.radius > cir.radius)
  45.                         return this;/*
  46.                         没有带大括号的判断语句,表示条件成立只执行上面一句,否则执行下面一句
  47.                         *这里this.是指函数调用者
  48.                         *下面cir表示从参数列表传进来和函数调用者比的那个 Circle类型的对象
  49.                         */
  50.                 return cir;
  51. }
  52.         
  53. }

  54.         
  55.         
复制代码
/*
compare 函数是Circle 内部的方法,所以谁调用 compare():this指的就是谁

*/
   

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
木糖醇 发表于 2013-11-3 21:37
Circle cir其实与构造函数里边的参数一样,只不过是把参数类型换成了Circle,而变量换成了一个对象的引用。 ...

我的意思是,return cir和return new cir();有什么区别,我知道返回的是对象,我也知道指的是对象。但是对象不是应该new建立吗,cir只是对象的引用,没有对象怎么引用?我就理解不了这里了
回复 使用道具 举报
zdrain 发表于 2013-11-3 23:39
我的意思是,return cir和return new cir();有什么区别,我知道返回的是对象,我也知道指的是对象。但 ...

你这个代码只是一个方法,又不能执行,哪里来的引用和返回?你要在主函数里new出对象去调用这个方法才会有返回值,那时自然有引用。
回复 使用道具 举报
zdrain 发表于 2013-11-3 23:39
我的意思是,return cir和return new cir();有什么区别,我知道返回的是对象,我也知道指的是对象。但 ...

创建对象当然不是在这里了    看你发的代码不完整    只是发了一个方法的代码    你看看其他类或者主函数里是不是创建了对象    调用了这个方法
回复 使用道具 举报
zdrain 中级黑马 2013-11-4 16:24:31
9#
木糖醇 发表于 2013-11-4 12:19
创建对象当然不是在这里了    看你发的代码不完整    只是发了一个方法的代码    你看看其他类或者主函数 ...

对,是已经创建了对象,这就相当于返回了一个对象,嗯,还是稍微有点绕,唉,脑袋得钱治了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马