String在方法中的传递方式(调用外部方法给String变量赋值时,未得到预期结果)

Posted 熊猫儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String在方法中的传递方式(调用外部方法给String变量赋值时,未得到预期结果)相关的知识,希望对你有一定的参考价值。

示例:

public class StringTraining {
  public static void changeStr(String str){
    str = "137878";
  }
  public static void main(String[] args){
    String a = "b";
    changeStr(a);
    System.out.println(a);
  }
}

输出仍旧为b

分析:首先栈中存的是堆中对象的地址,因为String对象的特殊性(String有自己的常量池),当遇到常量池中没有的字符串时,String会开辟新的内存空间(生成新对象)。实例中,将a的值(“b”的地址)赋值给了str,从而起初示例中a引用指向“b”,str初始值也是指向“b”;然而当给str重新赋值时,str指向了另一个内存空间(即存储的是新字符串的地址,相当于给str重新赋值了),因此str指向“137878”,对a没影响。

情景:当调用外部方法改变String的值是无法生效的,比如我想用外部方法进行参数校验,当某个String类型参数为空或null时,我给这个参数赋一个默认值,这个赋值动作是无效的,因而当用到该参数时,仍旧会报空指针。

以上是关于String在方法中的传递方式(调用外部方法给String变量赋值时,未得到预期结果)的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSP 中的 ResultSet 传递给 Javascript

参数传递

参数传递

Ajax 调用将字符串传递给 Web 服务并返回 String[]

Java中方法参数传递的问题

Express 和 Nodejs:调用外部 API 的最佳方式