Java 类实例问题,Android

Java 类实例问题,Android,java,android,class-instance-variables,Java,Android,Class Instance Variables,我正在尝试为android制作一个游戏 我的主类中有一个位图和画布实例 我有另一个实例,比方说,渲染器类。 该呈现器类在同一个包中,但不是我的主类的子类 如果我将位图和画布实例传递给该渲染器类的一个方法,并且该方法将把传递的位图绘制到传递的画布上,那么是传递了实际实例还是创建了新的实例副本,然后传递?好吧,我已经试过了,并且看到了正在传递的实际实例。因为我看到位图被绘制到画布上 我的问题是,为什么要传递实际的实例? 如果是这样的话-> public class instanceTest {

我正在尝试为android制作一个游戏 我的主类中有一个位图和画布实例

我有另一个实例,比方说,渲染器类。 该呈现器类在同一个包中,但不是我的主类的子类

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

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


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,但是对于其他位图和画布,我确实会发送实际的实例。这让我很困惑。有人能解释一下吗? 或者,与基本类型不同的类对象总是这样吗?这会让垃圾收集器发疯吗


提前谢谢,如果你不懂我的英语,告诉我,我会把伪代码放在这里澄清

在开始编写Java代码之前,您应该真正阅读

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

您的实际代码使用对象。当您传递一个对象时,实际上是在堆上传递对它的引用。因此,对它所做的每一个更改都将在实际对象上进行。唯一的例外是,您不能将对象“重新分配”给其他对象,因为您只持有对堆的引用-您可以将引用“重新分配”到堆上的另一个位置,但原始引用将继续指向原始对象

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


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

我不太确定您在这里要问什么,但如果您希望打印输出为1,则需要在数字++之后添加“num=number;”(或者甚至不用为numIncrementor辩护,只需将num++放在方法中即可)。我可以建议您发布伪代码,因为我不理解您的问题。看起来您正试图在另一个类中设置并获取静态字段。如果是这种情况,请参阅。您还可以阅读Java中的指针