求前辈指点,强制类型转换

Fulora 2012-09-14 09:51:57

package com.Code_Person;
import java.util.*;
public class Code
{
public final int id; //身份证号已确认,不能修改
public Code(int id)
{ this.id=id; }
//这里提示我overrides java.lang.Object.equals
//问题1:为什么我随便写个名字叫做equals的方法就重载了?
public boolean equals(Object anObject)
{
//问题2:传进来的时候类型和参数不就确定了吗,为什么这里还要判断一次?
if(anObject instanceof Object)
{
//Incompatible operand types int and Code
//不兼容的操作数类型int和代码
// return this.id==(Code)anObject.id;

//问题3:要改成下面这种写法才没报错 为什么 上面不是已经做了类型转换了吗0.0?
Code tmp=(Code)anObject;
return this.id==tmp.id;
}
return false;
}
}


谢谢0.0
...全文
113 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Fulora 2012-09-14
  • 打赏
  • 举报
回复
啪啪啪 学习了=w= 谢谢
LogicTeamLeader 2012-09-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
问题1

没看明白, 但不随便啊,需要参数列表,方法名和返回类型相同

问题2
应改为

Java code

if(anObject instanceof Code)

因为你要测试的是传进来的对象是否是一个Code类的实例,判断是否是Object没有任何意义
传进来的是Object类型的引用没错,但这里instanceof 测试的是对象实例的类型


问题3
……
[/Quote]
同意,建议结贴。
杀手 2012-09-14
  • 打赏
  • 举报
回复
this.id==((Code)anObject).id
yktd26 2012-09-14
  • 打赏
  • 举报
回复
问题1

没看明白, 但不随便啊,需要参数列表,方法名和返回类型相同

问题2
应改为
if(anObject instanceof Code)

因为你要测试的是传进来的对象是否是一个Code类的实例,判断是否是Object没有任何意义
传进来的是Object类型的引用没错,但这里instanceof 测试的是对象实例的类型


问题3
应该为
return this.id==((Code)anObject).id;  

只是一个运算符优先级的问题,找你那样写的实在强转 id的类型,所以是不行的
_jerrytiger 2012-09-14
  • 打赏
  • 举报
回复
1、equals 是Object类的方法,所有类都是它的子类。 所以你的类也是它的子类,就重写了(是重写,不是重载)

2、方法里面定义的参数是Object类型,所以这个方法,不管你传什么类型,它都能够接收,为了防止你传非指定类型的参数,所以要用instanceof 判断一下。 但是你这里用的是instanceof Object ,所以这句话再这里就是句废话,因为所有类都是Object ,除非你传的参数是null

3、Code 为 Object 的子类 , 参数为Object类型,向下转型要强转。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧