本篇内容介绍了“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]的值发生了变化。
从上面的分析,我们可以得出结论:对于引用类型,其实参数传递时仍然是按值传递的;当然,按引用传递也不是完全没有道理,只是参考对象不是引用类型本身,而是引用类型所指向的对象。
“Java的传值与传引用是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。