gpt4 book ai didi

java - 此代码背后的逻辑解释 - Java

转载 作者:行者123 更新时间:2023-12-01 18:47:29 25 4
gpt4 key购买 nike

我有别人写的这段代码,但我很难理解它。

它工作正常并生成正确的结果,但我无法理解它是如何工作的

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!");
}
}
}

这两个类的输出是:我是一辆大众汽车,有 20 个 clown !

但是每当我打印

clowns.size() 

在“Volkswagen”的 add() 方法中,它总是返回 0 那么它是如何比较的

clowns.size() == 20

并评估它是否为真?

最佳答案

您的大众汽车中 clown 数量超过其容量的原因在于 clown 的添加方式。

本质上是在行内

clowns.add(clown);

在方法Volkswagen.add()中。它首先调用 hashCode要添加的 clown 的形状,然后将其添加到其内部结构中。自 hashCode递归调用Volkswagen.add()再次强调,此时 clown 尚未添加到(内部数据结构支持)HashSet ,因此size()返回 0。

这样在方法开始时就不会达到容量Volkswagen.add() ,但仅在退出此方法时(因为只有这样 clown 才会真正添加到 HashSet 中)。

关于java - 此代码背后的逻辑解释 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17161853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com