gpt4 book ai didi

java - Java线程中变量的作用域

转载 作者:行者123 更新时间:2023-12-01 22:04:53 26 4
gpt4 key购买 nike

考虑这个 fragment 。

private String global_s;

public void onClick(View v) {
global_s = "String";

new Thread(new Runnable() {
public void run() {
final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");
ImageView mImageView = (ImageView) findViewById(R.id.imageview);
mImageView.setImageBitmap(bitmap);

final String local_s = global_s;
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(local_s);
});
}
}).start();
}

线程结束后,位图引用是否仍然存在(不被垃圾收集器收集)?因为它是在 mImageView 上分配的。

另外,local_s 怎么样?它的引用会被替换为 global_s 引用吗?

最佳答案

bitmaplocal_s 都是局部变量,因此在 run() 结束后立即处理(想想毫秒)。然而,Bitmap 和 String 对象可能会作为实例字段存储在 ImageView 和 TextView 对象中,共享它们的生命周期(想想几秒)。

关于local_sglobal_s之间的链接:local_s捕获赋值时global_s的值但几乎没用,因为它会立即传递给 .setText() - 请注意,Java 始终按值传递,因此会立即创建另一个副本并将其传递给 .setText() > 可能会将其存储在一个实例字段中,该实例字段在绘制时读取以呈现文本。

关于java - Java线程中变量的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32979324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com