Java隐式定义对类中使用的对象的引用是真的吗?

Nav*_*ved 13 java reference

在阅读书籍,浏览关于Java中引用类型的网络之后,我仍有一些疑问(或者我可能已经将这个概念解释错了).
如果有人明白我的疑虑,对我来说将是一个很大的帮助.

让我举一个包含类变量,实例变量和局部变量的类的例子.

public class Test {
  public static ArrayList<String> listCommon = new ArrayList<String>();
  private HashMap<String, String> mapInstance;

  public Test() {
    mapInstance = new HashMap<String, String>();
  }

  public void doSomething(String key) {
    ArrayList<String> local = new ArrayList<String>();
    if(key != null){
      local.add(mapInstance.get(key));
    }

    System.out.println("Value is added in instance Map: ", mapInstance.get(key));
  }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是;
1. listCommon(静态变量)和mapInstance(实例变量)对垃圾收集器的强引用?
2.变量local(在方法中定义和使用)是弱参考吗?
3. Phantom参考和Soft参考如何出现?
4.或以上3个概念无效; 是否只有在显式使用java.lang.ref包中定义的类型时,Java才定义引用?

任何帮助对我来说都很棒.

use*_*421 11

  1. 是listCommon(静态变量)和mapInstance(实例变量)对垃圾收集器的强引用?

他们是强有力的参考,是的.

  1. 变量局部(在方法中定义和使用)是弱参考吗?

不,它是一个局部变量,所以它是一个变量,因此它仍然是一个强大的参考.

  1. Phantom参考和Soft参考如何出现?

如果你使用它们.如果您不使用它们,则无需担心它们.它们用于编写各种缓存.

  1. 或以上3个概念无效; 是否只有在显式使用java.lang.ref包中定义的类型时,Java才定义引用?

参考变量总是很强.只有在明确使用它们时才会出现其他类型.

  • +1的答案,虽然为了完整性我觉得"强引用"是比"本地强引用"更好的术语.它是一个局部变量,但没有任何诸如"本地强参考"AFAIK之类的东西. (3认同)