[关闭]
@XQF 2017-02-15T21:46:55.000000Z 字数 999 阅读 1241

Java中的值传递和引用传递

java


很是在纠结什么是值传递,什么是引用传递。其实本质上来说都是值传递。只不过引用传递或者地址传递传递的是引用或者地址的值。

因为java中方法的参数类型总体来分的话有两种,一种是基本数据类型,一种是引用。基本数据类型的参数传递是值传递,在方法调用过程中,实参会把值传递给形参,形参只是用实参的值初始化一个副本(临时存储单元),因此虽然形参和实参是有相同的数值,但是他们存在不同的存储单元,根本就不是一档子事。

1.值传递实例

实例也就不写了,实在是记忆深刻,在学C语言交换两个数值内容的时候是尝尽了苦头。当时也没有学习关于对象,引用的知识。只是用地址解释了,虽然地址是本质原因,但是,。,那个时候谁能理解到呀

2.引用传递

把引用传递给形参,相当于是把对象的地址传递给了形参,于是我在方法中修改对象内容,这个修改会同步到该对象。

  1. public class Test {
  2. public static void print(StringBuffer sb) {
  3. sb.append("World");
  4. System.out.println("中" + sb);
  5. }
  6. public static void main(String[] args) {
  7. StringBuffer sb = new StringBuffer("Hello ");
  8. System.out.println("前" + sb);
  9. print(sb);
  10. System.out.println("后" + sb);
  11. }
  12. }

前Hello
中Hello World
后Hello World

3.注意不可变对象

在写引用传递实例的时候,我使用了String类,发现不成功。为什么?

原因在于String类型是一个不可变对象,表面上对str的修改实际上是将引用变量引用到了一个新建的对象,而原来引用变量指向的对象就被抛弃了,根本就没有发生任何改变

不可变对象的错误使用

  1. public class Test {
  2. public static void print(String str) {
  3. str="中 "+str;
  4. }
  5. public static void main(String[] args) {
  6. String str="Hello";
  7. System.out.println("前 "+str);
  8. print(str);
  9. System.out.println("后 "+str);
  10. }
  11. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注