Java 分配新对象是否会自动销毁以前分配给同一数据成员的对象?
考虑到以下两种情况,请帮我一劳永逸地澄清我头脑中的疑问 案例1:Java 分配新对象是否会自动销毁以前分配给同一数据成员的对象?,java,android,garbage-collection,Java,Android,Garbage Collection,考虑到以下两种情况,请帮我一劳永逸地澄清我头脑中的疑问 案例1: public class Activity { WebView mWebview; @Override public void onCreate(Bundle savedInstanceState) { initWebView(); } public void initWebView() { mWebView = (WebView) findViewById(R.id.webview);
public class Activity {
WebView mWebview;
@Override
public void onCreate(Bundle savedInstanceState) {
initWebView();
}
public void initWebView() {
mWebView = (WebView) findViewById(R.id.webview);
}
}
findViewById()
是否实例化
新建WebView
对象秒时间
它叫什么WebView
对象(以前是
自动分配给mWebView
)
摧毁?(即,由于
放入垃圾队列中
收藏)public class Activity {
WebView mWebview;
MyPictureListener mPictureListener;
@Override
public void onCreate(Bundle savedInstanceState) {
initWebView();
}
public void initWebView() {
mWebView = (WebView) findViewById(R.id.webview);
mPictureListener = new MyPictureListener(mWebView);
mWebView.setPictureListener(mPictureListener);
}
}
initWebView()
时
第二次,是旧的
MyPictureListener
对象(即
以前分配给
mPictureListener
)自动
摧毁?(即,由于
放入垃圾队列中
收藏)案例1:无论调用多少次
findViewById(R.id.webview)
,返回的对象都是UI框架膨胀布局时创建的同一个webview。当你把它赋给你的变量时,你只是说“我想要一个对象的句柄”,这就是全部。如果将mWebView
设置为null
,则该对象仍然存在,并且从活动的UI中引用了该对象,您只是无法再从mWebView
访问它
案例2:是(只要“自动销毁”在Java中起作用)。您的mWebView
有一个指向MyPictureListener
对象的句柄(指针),当您将其分配给该类的新实例时,对旧对象的引用将丢失,旧对象现在是垃圾收集的候选对象
这实际上是对指针如何工作的一个[非常概括的]迷你解释,我听一些人说Java不使用这个概念。这完全是错误的,并且在C++中使用指针变得更加舒服,这将给你更好地洞察这些问题。 < P> 1:不管你调用了多少次代码< FordVIEWBYID(R.ID.WebVIEW)< /C>返回的对象与UI框架扩展布局时创建的WebView相同。当你把它赋给你的变量时,你只是说“我想要一个对象的句柄”,这就是全部。如果将
mWebView
设置为null
,则该对象仍然存在,并且从活动的UI中引用了该对象,您只是无法再从mWebView
访问它
案例2:是(只要“自动销毁”在Java中起作用)。您的mWebView
有一个指向MyPictureListener
对象的句柄(指针),当您将其分配给该类的新实例时,对旧对象的引用将丢失,旧对象现在是垃圾收集的候选对象
这实际上是对指针如何工作的一个[非常概括的]迷你解释,我听一些人说Java不使用这个概念。这完全错误,并且在C++中使用指针变得更舒服,这将给你更好地洞察这些问题。