Java在方法参数传递时:
1、对于基本类型,传递值
2、对于对象类型,传递对象引用
需要注意的是:对于上述两种传递类型,在传递时都是拷贝传递,即值传递时拷贝出一个新值,引用
传递时拷贝出一个新的拷贝。
有时候也说Java只有值传递,意思是对于引用类型,传递引用的值。一个概念,不用纠缠。
在内存中对象类型可以看做两块,一块是对象的引用,一块是数据区。引用块里面保存了数据区的地址。
看如下示例代码:
1 public class Test {
2
3 public static void main(String[] args) {
4 // 值传递
5 int i = 1;
6 addInt1(i);
7 System.out.println(i);// 输出1
8 addInt2(i);
9 System.out.println(i);// 输出1
10
11 // 引用传递实例1
12 String str = "123";
13 modifyStr1(str);
14 System.out.println(str);// 输出123
15
16 // 引用传递实例2
17 StringBuilder stringBuilder = new StringBuilder("123");
18 modifyStringBuilder(stringBuilder);
19 System.out.println(stringBuilder.toString());// 输出123456
20 }
21
22 // 拷贝了新的值,原值不变
23 public static void addInt1(int i) {
24 i = 2;
25 }
26
27 // 拷贝了新的值,原值不变
28 public static void addInt2(int i) {
29 i++;
30 }
31
32 // 新的拷贝引用指向了一块新数据区,原拷贝仍然指向原数据区
33 public static void modifyStr1(String str) {
34 str = "456";
35 }
36
37 // 新的拷贝引用仍然指向原数据区,但修改了原数据区的内容
38 public static void modifyStringBuilder(StringBuilder str) {
39 str.append("456");
40 }
41
42 }
posted on 2011-03-31 14:05
liucs 阅读(295)
评论(0) 编辑 收藏 所属分类:
Java