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