java数组和list存的是对象地址还是对象本身?

item = new item();
for(...){
       list.add(item);
}
阅读 14.8k
9 个回答
Java中一切皆对象

Item item = new Item();
// item是引用  new Item();是创建对象, 创建一个引用指向对象
Integer i = new Integer(10);
// i是引用  new Integer(10);是创建对象, 创建一个引用指向对象

还有,java引用更加类似C++的指针,所以,你可以当作是指向地址。

/**
 * <p></p>
 *
 * @author 三产
 * @version 1.0
 * @date 2017-07-17
 * @QQGroup 213732117
 * @website http://www.coderknock.com
 * @copyright Copyright 2017 拿客 coderknock.com  All rights reserved.
 * @since JDK 1.8
 */
public class TestArray {
    public static void main(String[] args) {
        Item[] items = new Item[3];
        Item item = new Item();
        item.setName("123");
        items[0] = item;
        item.setName("改变");
        System.out.println(items[0].getName());
    }
}

class Item {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Item{" +
                "name='" + name + '\'' +
                '}';
    }
}

最后输出的是“改变”,说明存储的是内存地址(不然没有修改数组中的对象数组中对象为什么会发生改变)

数组集合存储的是对象的引用。
如果是基本数据类型那存储的就是值了。

list 用的是 array 实现,而 arrayjava 中就是对象(java编程思想)

Java中一切都是引用,可以简单看成是对象“地址”。

没区别。从语义层面来说对象引用就是对象本身,因为如果没有引用,是没有办法操作对象本身的。当然如果题主说的地址是指的引用的话

如果是对象,存的是地址

存的是对象在堆上的地址啦

我感觉都答的这么随意。竟然还采纳了。
试试这段:

import java.util.*;

class Item { 
    public String name; 

    public String toString() { 
        return name; 
    } 
}

public class Test {
    public static void main(String[] args) {
        Item item0 = new Item();
        item0.name = "xxxx";

        List<Item> list = new ArrayList<>();
        list.add(item0);

        item0 = null;

        Item item1 = list.get(0);
        System.out.println("item1 == null :" + (item1 == null));
        System.out.println("item1.toString() : " + (item1 != null ? item1 : "item1 is null"));
    }
}

在来下结论是否存的只是引用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题