Java集合3-11表述有问题,可能会引起误解?

Java集合3-11表述有问题,可能会引起误解?

原句如下:

getClass()是Object类的方法,该方法的返回值类型是Class类,通过getClass()方法可以得到一个Class类的对象。而.class返回的也是Class类型的对象。所以,如果obj.getClass()和Cat.class返回的内容相等,说明是同一个对象。

最后一句的表达,甚至整个句子都是有问题的,如果getClass和class都是返回对象,怎么确保同时返回同一个对象,它们指向同一个地址??

其实就是很简单的事情,很容易说清的事情,两者都是返回调用这个函数的对象的 类型 判断两个对象的 类型是否相等,  而不是判断这两个对象是否相等, 写了一堆让人发生歧义的话

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

getClass()和class()返回的对象确实是同一个。

你可以自己试验,hashCode()可以返回对象的内存地址

Cat cat = new Cat();
System.out.println(cat.getClass().hashCode());
System.out.println(Cat.class.hashCode());


  • py_builder 提问者 #1
    你两句话都说错了 首先,getClass()和class()返回的不是对象是类 第二,hashCode返回的不是地址,是一串编号,这个编号就像视频中说到的用来区分应该把这堆数据丢到哪个区域(垃圾桶) 如下: Cat cat = new Cat(); System.out.println("getClass---"+cat.getClass()); System.out.println("hashCode---"+Cat.class.hashCode()); 结果: getClass---class com.newproject.Cat hashCode---2018699554 可以看到getClass返回的 --Cat类 hashCode返回的是一串int,不是地址,他们是编号 追根溯源,本文就是来误解学生的,getclass就是读取 类型 不是读取对象
    2020-07-16 11:30:23
  • 慕丝1539783 回复 提问者 py_builder #2
    首先,在java中,一切皆对象,所有返回值,都可以看做是对象,类也是对象。 getClass()返回结果是Class<>,要证明这个也是个对象,可以把它强转成Object类,不会报错。 Object obj1 = (Object) cat.getClass(); Object obj2 = (Object) Cat.class; 其次,hashCode()返回的的确不是内存地址,但是却是身份标识,身份标识由内存地址等通过一定的算法得出。变相可以证明其内存地址相同(在没有重写hashCode()的情况下)。 Java不能直接访问操作系统底层,所以获取真正内存地址比较麻烦,需要调用Unsafe类,网上也有很多代码,可以自己去搜索代码。 通过Unsafe类返回的内存地址,也可以证明,getClass()和class()返回的对象内存地址相同。
    2020-07-16 12:34:26
  • py_builder 提问者 #3
    本着开放的态度我暂时赞同你的看法吧。 你能帮我看下这个问题吗?https://class.imooc.com/course/qadetail/240632 这个问题才是有讨论的意义,谢谢。
    2020-07-16 14:03:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师