You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java异步setHash函数是否会存入null值?

问题描述

我有如下异步的setHash函数:

public void setHash(Context context, String hash) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("has", hash);
    editor.apply();
}

我通过以下代码调用该函数:

private String mHash = "s4mp1eh45h";

void myFunction() {
    setHash(this, mHash);
    mHash = null;
}

已知Java是按值传递,现请教:setHash函数中保存的hash是否有可能为null?

回答

不可能为null,原因如下:

  • Java中对于引用类型的参数传递,传递的是对象引用的副本。调用setHash(this, mHash)时,mHash当前指向的是字符串s4mp1eh45h的引用,这个引用的副本会被传入setHash的hash参数,此时hash参数和mHash指向同一个字符串对象。
  • 后续执行mHash = null只是修改了mHash变量本身的指向,让它不再指向原来的字符串对象,但这不会影响setHash方法里hash参数的指向——它仍然指向最初的s4mp1eh45h字符串。
  • 即便editor.apply()是异步执行的,它最终保存的也是hash参数指向的字符串对象,外部mHash被设为null的操作不会对这个对象产生任何影响,因为字符串本身是不可变的,且hash参数的引用并未被修改。

内容的提问来源于stack exchange,提问作者user1506104

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:50:38