lotusswan
BlogJava
::
首页
::
联系
::
聚合
::
管理
11 Posts :: 0 Stories :: 4 Comments :: 0 Trackbacks
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(3)
给我留言
查看公开留言
查看私人留言
我参与的团队
随笔分类
AppServer(1)
EJB(1)
Tiger学习笔记(9)
随笔档案
2007年1月 (1)
2006年12月 (2)
2006年11月 (6)
2006年10月 (2)
搜索
最新评论
1. re: Java 5.0对Unicode码的支持
好文章
--censhao
2. re: Tomcat 5.5端口设置
不用重启也可以。
--啊
3. re: EJB3.0和EJB2.1有哪些区别
评论内容较长,点击标题查看
--Yuqiang Liao
4. re: Tomcat 5.5端口设置
才
--事实上
阅读排行榜
1. Tomcat 5.5端口设置(11430)
2. EJB3.0和EJB2.1有哪些区别(4113)
3. 泛型与类型转换(3111)
4. Java 5.0对Unicode码的支持(2253)
5. 泛型与集合(1183)
评论排行榜
1. Tomcat 5.5端口设置(2)
2. EJB3.0和EJB2.1有哪些区别(1)
3. Java 5.0对Unicode码的支持(1)
4. 覆写子类的返回类型(0)
5. 队列(0)
Java经典问题:传值与传引用?
Java到底是传值还是传引用?相信很少有人能完全回答正确。通常的说法是:对于基本数据类型(整型、浮点型、字符型、布尔型等),传值;对于引用类型(对象、数组),传引用。基本类型传值,所有人都不会对此有疑义;问题出在引用类型上。
为引入正题,不妨先看看下面的例子,你能正确给出程序的运行结果嘛?
/** */
/**
* @(#)Swap.java
*
*
*
@author
*
@version
1.00 2007/1/5
*/
public
class
Swap
{
public
Swap()
{
}
public
static
void
main(String[] args)
{
Changer c
=
new
Changer();
String stra
=
"
Mighty
"
;
String strb
=
"
Mouse
"
;
c.swap(stra, strb);
System.out.println(stra
+
"
"
+
strb);
String[] strArr
=
new
String[
2
] ;
strArr[
0
]
=
stra;
strArr[
1
]
=
strb;
c.swap(strArr);
System.out.println(strArr[
0
]
+
"
"
+
strArr[
1
]);
}
static
class
Changer
{
public
<
T
>
void
swap(T a, T b)
{
T temp
=
a;
a
=
b;
b
=
temp;
}
public
<
T
>
void
swap(T[] t)
{
if
(t.length
<
2
)
{
System.out.println(
"
error!
"
);
return
;
}
T temp
=
t[
0
];
t[
0
]
=
t[
1
];
t[
1
]
=
temp;
}
}
}
上面程序的正确运行结果为:
Mighty Mouse
Mouse Mighty
你答对了嘛?
下面我们来分析一下:为什么会出现上面的运行结果?
为分析这个问题,我们必须对程序中的数据在内存中的布局有一定了解。上面main程序中和String相关的变量共有3个,其布局可以用下图所示:
当调用swap(stra, strb)函数时,传递的是引用类型stra、strb的拷贝值,因此函数中任何对参数的改变都不会影响到stra和strb的值;而调用swap(strArr)时,传递的是strArr的拷贝值,程序中对参数的任何改变仍然不会影响到strArr的值,然而swap(T[] t)中改变的并不是strArr的值,而是strArr[0]和strArr[1]的值,也就是引用类型strArr所指向的对象的值,因而strArr[0]和strArr[1]的值发生了变化。
从上面的分析,我们可以得出结论:对于引用类型,其实参数传递时仍然是按值传递的;当然,按引用传递也不是完全没有道理,只是参考对象不是引用类型本身,而是引用类型所指向的对象。
posted on 2007-01-05 20:34
lotusswan
阅读(574)
评论(0)
编辑
收藏
所属分类:
Tiger学习笔记
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
Java经典问题:传值与传引用?
泛型与类型转换
泛型与集合
类型安全的List
StringBuffer与StringBuilder
Java 5.0对Unicode码的支持
覆写子类的返回类型
队列
Arrays类
Copyright @ lotusswan
Powered by:
.Text
and
ASP.NET
Theme by:
.NET Monster