romance博客
BlogJava
首页
新随笔
联系
聚合
管理
随笔-1 评论-3 文章-13 trackbacks-0
Java基本功:Reference
看过很多Java的书,里边对Reference讲的五花八门,很多初学者甚至一些学Java学了很长时间的javaor也被Reference搞的晕头转向、找不着北,但是要迈向Java高手的境界,就必须深入的理解这些基础概念。
其实可以把Reference理解为一种逻辑上的原子类型的数据对象,他的值是对象在内存中的地址,例如,对一个Test类new出了两个对象object1,object2,那么object1==object2的值就是false的,为什么呢,因为是new了两次,就是在内存中生成了两个Test的对象,那么这两个对象的地址肯定是不一样的,所以object1==object2就是false了,但是如果只new了一个对象object,而object1和object2都是都是指向obect的reference,那么object1==object2肯定就是true了,因为object1和object2的值是同一个值,是同一个内存地址(一个对象当然只有一个内存地址,要不就是两个对象了)
对于Java的参数传递,其实Java的参数传递都是传值的,也就是说在方法中,行参是对实参的一个复制,对于传递对象,其实传的是这个对象的引用(对象在内存中的地址),在方法体内,行参是这个地址的值(值传递),当在方法内修改对象属性时,就根据这个内存地址修改在该地址的对象的属性,这样实参所指的对象的属性就被改变了。根据上边的讲解是很容易理解这一点的,下边的例子可以更好的说明:
1
public
class
Test
{
2
int
t;
3
String s
=
"
hello
"
;
4
5
public
static
void
main(String[] args)
{
6
Test test
=
new
Test();
7
System.out.println(test.t);
8
9
test.change1(test);
10
System.out.println(test.t);
11
12
test.t
=
0
;
13
test.change2(test);
14
System.out.println(test.t);
15
16
System.out.println(test.s);
17
18
test.change3(test.s);
19
System.out.println(test.s);
20
21
test.change4(test);
22
System.out.println(test.s);
23
}
24
25
public
void
change1(Test test)
{
26
test.t
=
5
;
27
}
28
public
void
change2(Test test)
{
29
test
=
new
Test();
30
test.t
=
5
;
31
}
32
33
34
public
void
change3(String string)
{
35
string
=
"
hi
"
;
36
}
37
38
public
void
change4(Test test)
{
39
test.s
=
"
hi
"
;
40
}
41
}
42
43
44
输出:
45
0
46
5
47
0
48
hello
49
hello
50
hi
posted on 2006-05-13 17:32
romance
阅读(89)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
(1)
2007年3月 (1)
文章档案
(13)
2006年10月 (4)
2006年5月 (9)
相册
我的照片
Link
中国IT实验室
Matrix
oksonic
最新随笔
1. hurt no sound
搜索
最新评论
1. re: HTML页头的Meta标签详解[未登录]
1
--1
2. re: HTML页头的Meta标签详解
请问,如何将主页和内容页meta设置得不一样?
--妹纸控
3. re: HTML页头的Meta标签详解
写的不错,谢谢!
--康健碧波