我是一名初学程序员,在我的教科书中遇到过这个问题:
public boolean equals(DataElement otherElement)
{
IntElement temp = (IntElement) otherElement;
return (num == temp.num);
}
IntElement
是DataElement
的子类。 num
是一个存储链表的值的int。
(IntElement)
之后temp =?
的目的是什么?IntElement temp = otherElement
会出现什么问题?而且,一般来说,将数据类型放在括号中的是什么呢?
答案 0 :(得分:9)
这称为铸造,见这里:
基本上,通过这样做:
IntElement temp = (IntElement) otherElement;
您告诉编译器忽略您将otherElement
声明为DataElement
的事实,并相信它将是IntElement
而不是DataElement
或其他一些子类DataElement
。
您不能只使用IntElement temp = otherElement;
这样做otherElement
,DataElement
定义为IntElement
成为其他元素,在本例中为instanceof
。这将是对类型安全的一大打击,这就是首先定义类型的原因。
技术上可以使用类型推断来完成:
然而,Java不支持这一点,你必须明确。如果可以获取其他元素,您可能希望在转换之前使用{{1}}检查类型运行时:
在您完成此操作之后的某个时刻,您可能也想看看泛型:
答案 1 :(得分:2)
(IntElement)
之后temp
的目的是执行类型转换,更专业的是强制转换,其中你说的是otherElement
,这是DataElement
类型为IntElement
的参数应作为更具体类型{{1}}的对象。
答案 2 :(得分:1)
(IntElement)将 DataElement 类型的otherElement强制转换为 IntElement
有关Java Types and Type Conversion (Casting)的详细信息,请查看此链接。
答案 3 :(得分:1)
jmein是正确的,它告诉编译器/解释器将一个变量类型转换为另一个。实际上,它只是告诉处理器将其视为另一种类型。在C中,这是一个祝福和诅咒,在java中,看起来你正在写作,你必须转换变量来对待它。
答案 4 :(得分:0)
这是一个类型广告See the example here