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]