关于JAVA中包装类的是什么类型传递这个问题的笔记
2017-07-17 15:08
706 查看
背景知识:
如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值。如果在函数中改变了副本的值不会改变原始的值.如果参数类型是引用类型,那么传过来的就是这个参数的引用,这个引用存放的是参数的对象地址。如果在函数中没有改变这个参数的引用地址,而是改变了地址中的 值,那么在函数内的改变会影响到传入的参数。
如果在函数中改变了参数的引用地址,如new一个,那么函数中的局部变量就指向了一个新的对象地址,此时传入的参数还是指向原来的地址,所以不会改变参数的值(如下图)。
/** * * @author ZHOUMI2 * 转自:http://blog.csdn.net/wuya814070935/article/details/49250773 */ public class Test { public static void test1(Integer num){ num = new Integer(5); } public static void test2(String str){ str.replace("1", "4"); } public static void main(String[] args) { Integer num = new Integer(1); test1(num); // 输出结果为1 System.out.println(num.intValue()); String str = new String("123"); test2(str); // 输出结果为123 System.out.println(str); } }
分析: 上述程序很容易让人误以为String类型和包装类型是值传递。
其实: String类型和包装类型都是对象类型,所以必然是引用传递。
但是由于String类和包装类都被设定成不可变的,没有提供value对应的setter方法,而且很多都是final的,我们无法改变其内容,所以导致我们看起来好像是值传递。
相关文章推荐
- 关于Java中String类型的参数传递问题
- 关于Boolean类型在flex与java中间传递的问题
- Java值传递和地址传递:关于String类型和集合类型作为函数参数时传值问题的测试
- 关于Boolean类型在flex与java中间传递的问题
- 关于Boolean类型在flex与java中间传递的问题
- Java中String类型的参数传递问题的解析
- 两个有趣的关于java里基本类型转换的问题
- Java中String类型的参数传递问题的解析收藏--转载
- Java中String类型的参数传递问题的解析
- 关于java值传递的问题
- 关于Flex 和java之间利用Blazeds通信的类型转换问题
- 关于java中Double类型的运算精度问题
- 关于参数传递的问题 这个帖子的感想
- 关于ArrayList类型转换的问题_java可以为啥c#不行
- Java基础篇笔记(二) ---容易忽视的表达式结果的类型,求概率、几率问题
- 关于$query=mysql_query($query);返回的是什么类型的值的问题的理解
- 越深入java 就觉得java做得越烂,java设计问题 之 :关于1.5,1.6 java处理基本对象类型cache的问题
- 急求高手帮忙解决,Java Script Error Description缺少对象,是什么原因,为什么我的网站老是出现这个问题
- Java学习笔记-关于默认类型或访问权限的总结
- 关于Java读取mysql中date类型字段默认值'0000-00-00'的问题