小编Bon*_*eak的帖子

单个引用变量如何访问所有对象字段?

Animal myAnimal = new Animal();
Run Code Online (Sandbox Code Playgroud)

我上面有这个代码.据我所知,它会做这些事情:

  1. 将在堆内存上创建动物对象
  2. 对该对象的引用将传递给引用变量"myAnimal".换句话说,"myAnimal"变量保存堆上"Animal"对象的内存地址.

我不明白的是

  1. 内存地址值如何?
  2. 是一个地址还是众多地址值?如果只有一个,myAnimal如何访问Animal对象的所有对象字段,如myAnimal.name,myAnimal.height,...?

有人能解释一下吗?提前致谢.

java jvm

4
推荐指数
1
解决办法
152
查看次数

HashMap.keySet()如何返回键的视图?

这是java.util.HasMap类中的keySet()函数:

public Set<K> keySet() {
    Set<K> ks = keySet;
    if (ks == null) {
        ks = new KeySet();
        keySet = ks;
    }
    return ks;
}
Run Code Online (Sandbox Code Playgroud)

在评论中,它说这个功能

返回此映射中包含的键的{@link Set}视图.该集由地图支持,因此对地图的更改将反映在集中,反之亦然.

因此,我期望KeySet类型的对象,此函数返回的对象将包含对"视图键"的引用.但是,当我查看代码时,KeySet类根本不包含任何字段及其所有超类.

final class KeySet extends AbstractSet<K> {
    public final int size()                 { return size; }
    public final void clear()               { HashMap.this.clear(); }
    public final Iterator<K> iterator()     { return new KeyIterator(); }
    public final boolean contains(Object o) { return containsKey(o); }
    public final boolean remove(Object key) {
        return removeNode(hash(key), key, null, false, true) …
Run Code Online (Sandbox Code Playgroud)

java memory hashmap inner-classes keyset

4
推荐指数
1
解决办法
1019
查看次数

标签 统计

java ×2

hashmap ×1

inner-classes ×1

jvm ×1

keyset ×1

memory ×1