Java值传递和地址传递:关于String类型和集合类型作为函数参数时传值问题的测试

来源:互联网 发布:nfv 电信网络架构重构 编辑:程序博客网 时间:2024/06/07 20:45
这个问题,可能是太简单了。稍微有点经验的,估计都不会犯这个错误。不好意思,过了个年,几天不写代码,生疏了,也就有了下面的bug。

先看代码,你要是一眼就看出问题了,那就请允许在下水那么一回。

基本数据类型是值传递的,那么基本数据类型的封装类型呢?是不是值传递呢,这个可是对象哟!

直接新建的字符串是值传递的,那么要是new 出来的string在参数传递的时候,是不是值传递的呢?

带着疑惑,看下面的代码。

public class StringTest {    public static void main(String[] args) {        String transmitValue = "初始值";        String transmitValueNew = new String("new 出来的字符串");        Integer integer = 100;        List<String> list = Lists.newArrayList();        list.add("0");        testTransmitValue(transmitValue, transmitValueNew, list, integer);        System.out.println(transmitValue);        System.out.println(transmitValueNew);        System.out.println(list.toString());        System.out.println(integer);        //testStringPool();    }    /**     * 测试字符串和集合在函数之间的传值问题,解决值传递和地址传递的疑惑.     */    private static void testTransmitValue(String transmitValue, String transmitValueNew, List<String> list, Integer integer) {        transmitValue += "修改的痕迹";        transmitValueNew += "assss修改的痕迹";        list.add("1");        list.add("2");        list.add("3");        integer = 9999;    }}



运行结果:


看了代码和运行结果。发现

不管是直接写的字符串,还是new出来的字符串,都是值传递。

封装的基本数据类型,也是值传递。


使用集合,使用习惯了,今天看到个字符串,也习惯性的就把他当参数给传到函数去了,然后就悲剧啦,这个字符串一直是原始值,一直没有修改。

而且,自己也没有意识到这个错误,也是很尴尬呀,怎么能这么水呢!

惭愧啦。

我就留个笔记,避免以后发生这么low的bug。

这字符串是值传递,集合是地址传递。具体就不写那么多了。


0 0
原创粉丝点击