首先你应该知道对象不属于某种引用,对象大多数时候是存放在堆中的,只有对象被引用了,才会说引用类型是哪种引用,而不应该说对象是哪种引用。因为同一个对象是可以同时被做个引用变量引用的。楼上说的new出来的都是强引用这种说法也很笼统,用关键字new创建对象只是创建对象的一种方式。比如创建一个软引用SoftReference<Object> sr = new SoftReference<>(new Object()); 这时应该说sr是软引用,而new Object()得到的对象是被绑定在这个软引用上的,但是sr本身是强引用。所以在判断引用类型的时候,应该从引用出发去找,因为一个对象可能同时被强引用了,也被软引用了。再举个例子:
Object o = new Object();
SoftReference<Object> sr = new SoftReference<>(o);
这个例子的o对象就是既被强引用了,又被软引用了。
new出来的都是强引用,软引用、弱引用、虚引用都是编程的方式使用的,只要是你在用的,你自己没用编程方式去引用,那就都是强引用