Java 如何为具有字符串数组的类重写equals()?
我需要澄清Object的equal方法中的String[]比较。 下面是我的代码快照。当我执行这段代码时,它给出的是true和false,而不是true和true。 同样在我的例子中,任务类为每个调用生成唯一的id。 我做错了什么?如有任何建议,将不胜感激Java 如何为具有字符串数组的类重写equals()?,java,Java,我需要澄清Object的equal方法中的String[]比较。 下面是我的代码快照。当我执行这段代码时,它给出的是true和false,而不是true和true。 同样在我的例子中,任务类为每个调用生成唯一的id。 我做错了什么?如有任何建议,将不胜感激 public class JobTask extends Task { String[] args; public WFTask(String[] args) { this.args = args;
public class JobTask extends Task {
String[] args;
public WFTask(String[] args) {
this.args = args;
}
@Override
public boolean equals(Object obj) {
if (! ( obj instanceof String[] ) ){
return false;
}
String[] arguments = (String[] ) obj;
boolean ret = Arrays.equals(this.args , arguments );
return ret;
}
@Override
public void execute(TaskExecutionContext context) throws RuntimeException {
--------------
--------------
}
public static void main(String[] args) {
String[] arg1 = {"a","b","c"};
String[] arg2 = {"a","b","c"};
System.out.println( Arrays.equals(arg1,arg2));
JobTask t1 = new JobTask(arg1);
JobTask t2 = new JobTask(arg2);
System.out.println( t1.equals(t2));
}
}
public abstract class Task {
private Object id = GUIDGenerator.generate();
public Task() {
}
Object getId() {
return id;
}
public abstract void execute(TaskExecutionContext context) throws RuntimeException;
}
您可以在调试器、提示、提示中看到这一点,但是 你在测试
System.out.println( t1.equals(t2));
但是你已经写信了
if (! ( obj instanceof String[] ) ){
return false;
}
由于t2不是字符串[]
,因此将返回false。我怀疑你打算写信
if (!(obj instanceof JobTask))
return false;
JobTask other= (JobTask ) obj;
return Arrays.equals(this.args , other.args);
您可以在调试器、提示、提示中看到这一点,但是 你在测试
System.out.println( t1.equals(t2));
但是你已经写信了
if (! ( obj instanceof String[] ) ){
return false;
}
由于t2不是字符串[]
,因此将返回false。我怀疑你打算写信
if (!(obj instanceof JobTask))
return false;
JobTask other= (JobTask ) obj;
return Arrays.equals(this.args , other.args);
您的
equals
方法接收的是jobstask
,而不是字符串[]
。您需要像这样重写它,例如:
@Override
public boolean equals(Object obj) {
if (! ( obj instanceof JobTask ) ){
return false;
}
String[] arguments = ((JobTask) obj).args;
boolean ret = Arrays.equals(this.args , arguments );
return ret;
}
您的
equals
方法接收的是jobstask
,而不是字符串[]
。您需要像这样重写它,例如:
@Override
public boolean equals(Object obj) {
if (! ( obj instanceof JobTask ) ){
return false;
}
String[] arguments = ((JobTask) obj).args;
boolean ret = Arrays.equals(this.args , arguments );
return ret;
}