有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中的数组和对象

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

dog[] mydog = new  dog[1];

mydog[0]= new dog();

mydog.name= "Bart!";

此行使用mydog在堆中创建一个对象

mydog[0].name = "Bart!";

是的。好的

但是 我的狗[0]。所有者=“jay”

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

请举例说明


共 (4) 个答案

  1. # 1 楼答案

    实际上

    mydog.name ...
    

    行不通

    你需要做的是

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

    这样就可以引用数组中的单个元素

  2. # 2 楼答案

    你创建了一系列狗,其中有一只狗。但是,dog数组不存储属性,而是存储dog。每只狗都会储存你分配给它的属性,比如名字和主人

  3. # 3 楼答案

    编辑:

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

    我假设你的狗课看起来是这样的:

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

    enter image description here

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


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

    mydog[0].name = "jay!";
    

    堆中的dog实例有一个指向字符串对象的指针,当然总是在堆中。 有了这句话,你就是:

    1. 创建一个新的字符串对象,上面写着“Bart”

    2. 更改“name”指针以指向此新字符串,而不是新字符串

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

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

  4. # 4 楼答案

    这很可能是MyDog类的结构

    public class MyDog{
    public String owner; // should be private
    public String name;  // should be private 
    }
    

    现在,每个MyDog对象由2个字符串对象(所有者和字符串)组成。所以,这两个字符串对象都是MyDog疯狂游戏的一部分