java中的数组和对象

java中的数组和对象,java,Java,我在数组和对象中遇到问题。。 像这样考虑: dog[] mydog = new dog[1]; mydog[0]= new dog(); mydog.name= "Bart!"; 此行使用mydog在堆中创建一个对象 和mydog[0]。name=“Bart!” 是的。好的 但是 mydog[0]。所有者=“jay” 我的问题是我们在堆中创建了一个对象。而且已经。把狗的名字储存在里面。而不是我们如何在里面多存一个名字“jay”。它 请举例说明 mydog.name ... 这是行不通的

我在数组和对象中遇到问题。。 像这样考虑:

dog[] mydog = new  dog[1];

mydog[0]= new dog();

mydog.name= "Bart!";
此行使用mydog在堆中创建一个对象

mydog[0]。name=“Bart!”

是的。好的

但是 mydog[0]。所有者=“jay”

我的问题是我们在堆中创建了一个对象。而且已经。把狗的名字储存在里面。而不是我们如何在里面多存一个名字“jay”。它

请举例说明

mydog.name ...
这是行不通的

你需要做的是

mydog[0].name=...
mydog[0].owner=...

这允许您引用数组中的单个元素。

您创建了一个狗数组,其中有一只狗。但是,dog数组不存储属性,而是存储dog。每只狗都存储您分配给它的属性,即名称和所有者

这很可能是MyDog类的结构

public class MyDog{
public String owner; // should be private
public String name;  // should be private 
}
现在,每个MyDog对象由(包含)2个字符串对象(所有者和字符串)组成。因此,这两个字符串对象是每个MyDog Inance的一部分。

编辑:

对不起,我以前可能误解了你的问题。 我制作了一个堆栈和堆应该是什么样子的图表。希望你能阅读它(可能下载和放大),并帮助理解。 在堆栈中有一个指向dog对象数组的指针(mydog)。数组对象在堆中,它存储指向dog对象的指针(这里只有一个,因为长度为1),我还显示了数组框上方的数组索引和数组的长度变量

我假设您的“狗”类看起来如下所示:

public class dog{
    public String owner;
    public String name;
}

提示:类名通常以大写开头


旧答案,可以帮你一些提示

mydog[0].name = "jay!";
堆中的dog实例有一个指向字符串对象的指针,当然总是在堆中。 通过上面的一行,您是:

  • 创建一个显示“Bart”的新字符串对象

  • 将“name”指针更改为指向此新字符串而不是新字符串

  • 因此,您不再在中存储一个名称“jay”,而是将旧的“Bart”对象替换为新的“jay”对象(来自dog对象)

    无论如何都要小心,因为您只是在修改dog对象中的指针。
    这意味着,如果您在其他地方有另一个指针,指向“bart”字符串,则不会改变。相反,如果没有其他指针指向旧的“Bart”字符串,那么“Bart”最终将被垃圾收集器收集并删除。

    @AfzaalAhmadZeeshan我想问一下你为什么要指出那个家伙我想我理解你的问题。。看看我的答案,告诉我你是否理解我的意思。是的,但我得到的输出都是名称。那么在一个对象中有两个字符串指针有什么问题呢?我不明白,请解释这些值存储在哪里,这些值存储在哪个值存储你指的是哪个。我创建的对象。我可以存储同一类classI的两个值对不起,我不理解第二句话。我的意思是我可以在我在heapI中创建的同一个对象中存储两个值(狗名和所有者),我不知道堆与它有什么关系,但你可以在单个对象中存储任意多的变量(直到某一点),你还没有展示你的狗的等级,所以这很难解释。