随笔 - 2  文章 - 2  trackbacks - 0
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

留言簿

随笔档案(1)

文章分类(16)

最新随笔

搜索

  •  

最新评论

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 阅读(290) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: