gpt4 book ai didi

java - 类实例问题,Android

转载 作者:行者123 更新时间:2023-12-01 15:48:25 26 4
gpt4 key购买 nike

我正在尝试制作一款 Android 游戏我的主类中有一个位图和 Canvas 实例。

我有另一个渲染器类的实例。该渲染器类位于同一个包中,但不是我的主类的子类。

如果我将位图和 Canvas 实例传递给该渲染器类的方法,并且该方法会将传递的位图绘制到传递的 Canvas ,那么是传递实际实例还是创建然后传递新实例副本?好吧,我已经尝试过并看到实际实例正在被传递。因为我看到位图被绘制到 Canvas 上。

这是我的问题,为什么传递实际实例?如果是这样的话 ->


public class instanceTest
{
static int num;

static void numIncrementor(int number)
{
number++;
}

public static void main(String[] args)
{
num = 0;
numIncrementor(num);
System.out.println(num);
}
}

在这里,当我打印 num 时,我仍然会得到 0,但对于其他位图和 Canvas ,我会发送实际实例。这让我真的很困惑。有人可以解释一下吗?或者与原始类型不同的类对象总是如此?它会让垃圾收集器发疯吗?

预先感谢,如果您不明白我的意思,请告诉我,我将在此处放置伪代码以进行澄清;

最佳答案

你真的应该阅读Java tutorial在开始编写 Java 代码之前。

在上面的示例中,您传递了一个原语 - 因此它的值只是传递给方法,放置在堆栈上,并且该值被更改。这就是原语在 Java 中的工作原理。这意味着您的 number 变量仅存在于 numIncrementor 方法的范围内 - 并且不会影响外部的内容。

您的实际代码适用于对象。当您传递一个对象时,您实际上传递了堆上对该对象的引用。因此,您对其所做的每项更改都将在实际对象上完成。唯一的异常(exception)是,您不能将对象“重新分配”到其他对象,因为您只持有对堆的引用 - 您可以将引用“重新分配”到堆上的另一个位置,但原始引用将继续指向原始对象。

至于你关于垃圾收集器的问题 - 不,它不会发疯。它实际上效果很好。 (GC 的类型不止一种,但这是一个完全不同的讨论)。

Java 不使用复制构造函数 - 如果您想将对象的副本传递给方法,您应该使其可克隆并传递克隆 它。但这可能不是您所需要的 - 请注意,复制构造函数比仅传递对象的引用消耗更多的资源。

关于java - 类实例问题,Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6639420/

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