文选流氓 发表于 2003-2-6 15:40

1-1-4-30 谁能帮我讲讲java里的reference?

发信人: javarookie (布猫), 信区: Java      
标题: Re: 谁能帮我讲讲java里的reference?
发信站: BBS 水木清华站 (Tue Oct8 16:18:05 2002), 站内信件

首先声明,我也是初学
折腾许久才略明白一点儿关于引用的概念
就算咱们一起探讨探讨吧:
我个人对引用的理解:
1. 变量分基本变量和引用变量,除了 char,byte,short,int,long,float,double,bool
ean,其他都为引用变量,由于 Java 是纯面向对象的,所以引用变量就是引用对象的变
量,例如 String 就是一个例子。
引用变量存储的是被引用对象的运行时地址,换句话说,引用变量就是一个指向对象的
指针。
因此,声明引用变量,例如 Object o; 语句声明了引用变量 o 为 Object 类型,但是
此时没有赋值,o 的值为 null,不指向任何对象。
一旦赋值,o 的值初始化为被引用对象的运行时地址。一个典型例子:
int[] i = {1,2,3};
println(i);
将打印 i 的地址,而不是数组,由此也可以看出,任何数组都是对象

2. Java 只有传值
所以当传递引用变量的时候,传递的是地址
这样,作为参数变量传入方法的引用变量,在方法内可以被修改,典型的:
public class TestReference {
    public void method1 (int[] i) {
      i = 4;
    }

    public static void main(String[] args) {
      int[] i = {1,2,3};
      System.out.println(i);
      new TestReference().method1(i);
      System.out.println(i);
    }
}

程序输出:
1
4

经过调用后,数组 i 被改变了。

这种现象很多网友都激烈的讨论过,认为不应该属于传值
但是综观 Java ,我个人还是认为确实是传值,只不过传的值是地址而已。
Sun 公司关于 Java 的书里也有图解


(Stack)
+———————————————----------------------
| main |i|method1|method1(i)|
+————————————————---------------------
          |                        |
堆      |                        |
(Heap)|                        |
+-----------------------+          |
|         |             |          |
|         V             |          |
|      + ----+          |          |
|      |i|<---------|----------+
|      +-----+          |
+-----------------------+



不知道我上述的观点是否正确,请指教,谢谢


【 在 kidjacky (jacky) 的大作中提到: 】
: 这个是不是就像c++里的引用,还是有别的意思。在java tutorial里的解释是A data e
: lement whose value is an address. 那和c++里的指针又有什么区别。
: reference在java里是一个什么样的东西?初学的说。
: 谁能帮我详细的解释一下。
页: [1]
查看完整版本: 1-1-4-30 谁能帮我讲讲java里的reference?