引用类型和值类型作为参数的值是否会传递的浅解
2012-09-15 11:56
274 查看
一直对这个问题有点模糊,今天看了下api,又在网上看了下别人的贴子,在结合自己写的几个测试类,总算是对这个问题有个浅显易懂的认识了.
String、Integer、Double等等虽然都是引用类型,但是和一般引用类型不一样,它们都是immutable,也就是说不可改变,也可以说他们没有set方法。
当这些特殊的引用类型作为方法参数时(9行),参数在方法中被改变时(3行),不是在原先被被分配的内存区域中作改变,而是会另外在内存的堆栈中开辟一块新的区域存放改变的值。所以这些类型虽然是引用类型,虽然在方法中被修改,但是变量仍然指向的未被方法改变的内存区域。
输出结果
test
同理,String[],Map、Set等集合中的String值也不能被转递
String、Integer、Double等等虽然都是引用类型,但是和一般引用类型不一样,它们都是immutable,也就是说不可改变,也可以说他们没有set方法。
当这些特殊的引用类型作为方法参数时(9行),参数在方法中被改变时(3行),不是在原先被被分配的内存区域中作改变,而是会另外在内存的堆栈中开辟一块新的区域存放改变的值。所以这些类型虽然是引用类型,虽然在方法中被修改,但是变量仍然指向的未被方法改变的内存区域。
public class Demo305 { void change(String str){ str+="change"; } public static void main(String[] args) { String str="test"; Demo305 test=new Demo305(); test.change(str); System.out.println(str); } }
输出结果
test
同理,String[],Map、Set等集合中的String值也不能被转递
相关文章推荐
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- Java传递基本类型:值传递,对象作为参数:引用传递
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- C# 值类型 引用类型 作为参数传递区别
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- JavaScript高级 面向对象(12)--引用类型值类型作为参数传递的特性
- 包装类型作为参数时,是值传递,不是引用传递
- string类型在参数传递中如何作为引用,如何在函数外修改函数内的string类型
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 基础才是重中之重~值类型与引用类型作为参数传递的不同表现
- 基本类型和引用类型作为参数传递
- Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- C#调用c++的dll,结构体数组作为引用参数的传递方式
- C# 001 --- 正确的删除一个控件的事件函数 --- 解决错误: “A”不包含“B”的定义,并且找不到可接受类型为“A”的第一个参数的扩展方法“B”(是否缺少 using 指令或程序集引用?)
- C# 引用类型作为函数参数时