您的位置:首页 > 编程语言 > Java开发

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

2017-02-15 15:18 921 查看
这个问题,可能是太简单了。稍微有点经验的,估计都不会犯这个错误。不好意思,过了个年,几天不写代码,生疏了,也就有了下面的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。

这字符串是值传递,集合是地址传递。具体就不写那么多了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: