我有其他人编写的这段代码,我很难理解它。
它工作正常并产生正确的结果,但我不明白它是如何工作的
package you;
import clowns.Clown;
import clowns.Volkswagen;
public class You {
static int counter = 0;
static Volkswagen vw = new Volkswagen();
public static void main(String args[]) {
vw.add(new RecursiveClown());
vw.done();
}
static class RecursiveClown extends Clown {
public int hashCode() {
if (++counter < 20) {
vw.add(new RecursiveClown());
}
return super.hashCode();
}
}
}
无法理解,显然RecursiveClown
没有在任何地方被调用,它的hashcode()
功能也没有
那么它是如何工作的并添加RecursiveClown
对象。
还有为什么它会回来super.hashCode();
还有另一个类,在上面的代码中被引用。
package clowns;
import java.util.HashSet;
import java.util.Set;
public class Volkswagen {
private static final int CAPACITY = 5;
private Set<Clown> clowns = new HashSet<Clown>();
public synchronized void add(Clown clown) {
if (clowns.size() >= CAPACITY) {
throw new IllegalStateException("I'm full");
} else {
clowns.add(clown);
}
}
public synchronized void done() {
if (clowns.size() == 20) {
// The goal is to reach this line
System.out.println("I'm a Volkswagen with 20 clowns!");
}
}
}
这两个类的输出是:I'm a Volkswagen with 20 clowns!
但每当我打印
clowns.size()
在add()
“大众”的方法中它总是返回 0 那么它是如何比较的
clowns.size() == 20
并将其评估为真实?