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。
这字符串是值传递,集合是地址传递。具体就不写那么多了。
先看代码,你要是一眼就看出问题了,那就请允许在下水那么一回。
基本数据类型是值传递的,那么基本数据类型的封装类型呢?是不是值传递呢,这个可是对象哟!
直接新建的字符串是值传递的,那么要是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。
这字符串是值传递,集合是地址传递。具体就不写那么多了。
相关文章推荐
- 关于Java中String类型的参数传递问题
- 关于 fstream 类型作为参数传递的问题
- Java-String类型的参数传递问题
- C++中关于二维数组作为函数参数传递的问题
- java函数的参数传递和String类型
- Java-String类型的参数传递问题
- Java-String类型的参数传递问题
- Java-String类型的参数传递问题
- 关于将函数的地址作为参数传递给另一个函数调用
- [Java]String类型的参数传递问题
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- Java-String类型的参数传递问题 推荐
- Java-String类型的参数传递问题
- Java中String类型的参数传递问题的解析
- Java-String类型的参数传递问题
- 关于指针作为函数参数传递的理解,对比普通变量作为函数参数的需注意点,其实就是行参和实参的问题。
- C++中关于将fstream对象作为函数参数传递相关问题说明
- java引用类型String作为参数的一些问题
- 关于二维数组作为参数传递给函数的问题
- Java中String类型的参数传递问题的解析