|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
发信人: javarookie (布猫), 信区: Java
标 题: Re: 谁能帮我讲讲java里的reference?
发信站: BBS 水木清华站 (Tue Oct 8 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[0] = 4;
}
public static void main(String[] args) {
int[] i = {1,2,3};
System.out.println(i[0]);
new TestReference().method1(i);
System.out.println(i[0]);
}
}
程序输出:
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里是一个什么样的东西?初学的说。
: 谁能帮我详细的解释一下。 |
|