撤废Java神话之参数按传址办法传送[Java编程]
本文“撤废Java神话之参数按传址办法传送[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在差别的java新闻组中,参数是传值还是传址一向是一个常常被辩论的话题.曲解的中央是以下两个事实:
对象是传引用的
参数是传值的
这两个可以同时成立吗?一个字:是!在java中,你历来没有传送对象,你传送的仅仅是对象的引用!一句话,java是传引用的.但是,当你传送一个参数,那么只有一种参数传送机制:传值!
普通,当程序员谈论传值和传引用时,他们是指语言的参数传送机制,c++同时支持这两种机制,因此,从前利用过c++的程序员开始仿佛不能肯定的java是若何传参数的.java语言为了事情变得简单只支持参数传值的机制.
java中的变量有两种范例:引用范例和原始范例.当他们被作为参数传送给办法时,他们都是传值的.这是一个非常重要的差别,下面的代码典范将阐明这一点.在持续前,我们有必要定义一下传值和传引用.
传值意味着当参数被传送给一个办法大概函数时,办法大概函数接纳到的是原始值的副本.因此,假如办法大概函数改正了参数,受影响的只是副本,原始值保持不变.
关于java中的参数传送的混乱是因为很多java程序员是从c++改变过来的.c++有引用和非引用范例的变量,并且辨别是通过传引用和传值得到的.java语言有原始范例和对象引用,那么,按照逻辑,java关于原始范例利用传值而对引用范例是传引用的,就像c++一样.毕竟,你会想到假如你正在传送一个引用,那么它一定是传引用的.这是一个很引诱人的设法,但是是错误的!
在c++和java中,当函数的参数不是引用时,你传送的是值得副本(传值).但是关于引用范例就差别了.在c++中,当参数是引用范例,你传送的是引用大概内存地址(传引用),而在java中,传送一个引用范例的参数的后果只是传送引用的副本(传值)而非引用自身.
这是一个非常重要的辨别!java不考虑参数的范例,一概传送参数的副本.仍旧不信?假如java中是传引用,那么下面的典范中的swap办法将交换他们的参数.因为是传值,因此这个办法不是像盼望的那样正常工作.
class Swap
{
public static void main(String args[])
{
Integer a, b;
int i,j;
a = new Integer(10);
b = new Integer(50);
i = 5;
j = 9;
System.out.println("Before Swap, a is " + a);
System.out.println("Before Swap, b is " + b);
swap(a, b);
System.out.println("After Swap a is " + a);
System.out.println("After Swap b is " + b);
System.out.println("Before Swap i is " + i);
System.out.println("Before Swap j is " + j);
swap(i,j);
System.out.println("After Swap i is " + i);
System.out.println("After Swap j is " + j);
}
public static void swap(Integer ia, Integer ib)
{
Integer temp = ia;
ia = ib;
ib = temp;
}
public static void swap(int li, int lj)
{
int temp = li;
li = lj;
lj = temp;
}
}
以上是“撤废Java神话之参数按传址办法传送[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |