gpt4 book ai didi

java - 逻辑等效的代码产生不同的结果

转载 作者:行者123 更新时间:2023-12-02 07:39:22 26 4
gpt4 key购买 nike

我以前从未在 Java 中遇到过此类问题。所有这些代码和完整项目可以在 my GitHub 找到。 。我有一个具有类层次结构的 Snowflake 类:

Snowflake extends SolidRectangle extends Movable extends Drawable extends Object

我的 Snowflake 类中的以下两个代码部分在我的游戏中产生不同的图形结果:

//In Snowflake class
public void decay()
{
age++;
color = randomSnowflakeColor();
if(age == 5)
{
super.remove();
Snowflake.Mempool.returnSnowflake(this);
}
}

//In Snowflake class
public void decay()
{
age++;
color = randomSnowflakeColor();
if(age == 5)
{
this.remove();
}

public void remove()
{
super.remove();
Snowflake.Mempool.returnSnowflake(this);
}

SolidRectangleMovable 都不会重写 remove 方法,但 Drawable 会重写,实现如下:

//In Drawable class
public void remove()
{
game.remove(this);
}

GameContent游戏具有以下实现:

//In GameContent class
public synchronized void remove(Drawable drawable)
{
removeQueue.add(drawable);
}

我不会向您介绍 removeQueue 的详细信息,只要说它正是您所期望的就足够了。

至于 Snowflake.Mempool,我知道手动内存管理通常不是 Java 程序员日常工作的一部分,但我发现创建和垃圾收集这些雪花的开销太大,所以我我想我会重复使用旧的雪花来避免这种开销。请不要因此分心。我的问题是,当前两个代码块看起来功能相同时,它们如何可能不同。

那么,前两个代码块怎么会产生不同的结果呢?

最佳答案

虽然调用 decay() 时预计会得到相同的结果,但从其他地方调用 remove() 时,类可能会产生不同的行为> 在代码中。

使用您的 IDE,搜索 remove() 方法的用法,一切都可能会被揭示。

关于java - 逻辑等效的代码产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11788946/

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