class Employee{
private String name;
private int rollno;
public Employee(String name,int rollno)
{
this.name=name;
this.rollno=rollno;
}
}
public class CT2{
public static void main(String[]args){
Employee emp1 = new Employee("Raghu",35);
Employee emp2 = new Employee("Raghu",35);
Employee emp3 = new Employee("Raghu",35);
if(emp2.equals(emp3))
System.out.println("They are equal");
else
System.out.println("They are not equal");
}
}
以上代码有什么问题?理想情况下,它应该打印“他们是平等的”,但我输出“他们不平等”
答案 0 :(得分:5)
您需要在班级中实施 public BusinessEntities.FileParseResult Parse(string FilePath)
{
FileParseResult _fileParseResult = new FileParseResult();
_fileParseResult.FileParseResultType = FileParseResultType.ValidFileClaim;
Logger.LogMessage(PREPROCESS_FILEPARSER.TRACE_MSG, "****WorkComp.Net : Pre Processor -> Start parsing valid AT XML File *****");
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
using (XmlReader reader = XmlReader.Create(FilePath, settings))
{
try
{
string tranmissionsattr = string.Empty;
string header = string.Empty;
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "transmissions")
{
for (int i = 0; i < reader.AttributeCount; i++)
{
reader.MoveToAttribute(i);
tranmissionsattr = tranmissionsattr + " " + reader.Name + "=\"" + reader.GetAttribute(i) + "\"";
}
reader.MoveToElement();
}
}
}
}
}
方法。
类Object的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x == y的值为true)。
添加以下方法对您有用。
equals
答案 1 :(得分:3)
为了使该工作成为if(emp2.equals(emp3))
,您需要覆盖Employee类中equals方法的默认行为。
@Override
public boolean equals(Object other){
/// your implementation of equals ..
}
表单对象类equals method docs
请注意,一旦覆盖此方法,通常需要覆盖
hashCode()
方法,以便维护hashCode()
方法的常规协定,该方法声明相等对象必须具有相等的哈希码
答案 2 :(得分:0)
您需要在Employee类中重写equals方法。
答案 3 :(得分:0)
如果不编写自己的equals()
,Java将使用默认值 - 比较对象标识。
当您创建两个对象时,这将失败。
作为类的创建者,只有可以判断,这些类的对象何时应被视为相等,即使它们是单独的实例。
你可能需要像
这样的东西public boolean equals(Object o) {
if(o instanceof Employee) {
Employee other = (Employee)o;
return this.rollno == other.rollno && this.name.equals(other.name);
}
return false;
}
请记住,无论何时实施equals
,您都应考虑实施hashCode
。
答案 4 :(得分:0)
由于您没有自己覆盖toString方法,因此它实际上使用了Object的版本。
这实际上是:
public boolean equals(Object o){
return this == o;
}
在您的示例中,您的对象具有相同的值,但没有相同的引用,因此,它失败。
添加:
@Override
public boolean equals(Object o){
if ( !(o instanceof(Employee)){
return false;
}
Employee t = (Employee)o;
return this.name.equals(t.name) && this.rollno == t.rollno;
}
为了完全对齐:也覆盖hashCode方法。
请理解我上面写的equals方法不可能抛出NullPointerException,因为你可以将name传递给构造函数。
答案 5 :(得分:0)
把它放在员工类中。
public boolean equals(Object object){
if(object instanceof Employee){
Employee emp2= (Employee) object;
if(this.name.equals(emp2.name) && this.rollno == emp2.rollno))
return true;
return false;
}
return false;
}
答案 6 :(得分:0)
目前,Employee对象emp2
使用Object类的equals()
方法来比较两个对象引用。下面的代码段显示了对象类equals()
方法,
public boolean equals(Object obj) {
return (this == obj);
}
您需要覆盖此equals()
方法,以使两个不同的对象相等。
答案 7 :(得分:0)
根据java doc,类Object的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x == y的值为true)。
/* Object.equals() */
public boolean equals(Object obj) {
return (this == obj);
Object的equals()比较引用。 这就是为什么它是错误的,因为它们是不同的对象。 equals()旨在使用对象的内部状态进行比较。
要解决您的问题,需要在Employee类中重写equals方法。