您的位置:首页 > 编程语言 > Java开发

Java中传值和传引用的区别

2016-02-21 14:26 357 查看
声明:此文是作为本人自己学习的心得与总结,同时也是与同学们进行交流,如果有错误的地方,希望同学们进行指正。

在这里,要想搞清楚二者的区别,那么首先明白两个概念,“传值”、“传引用”。

1、传值:传值就是指将一个值传递到方法的内部。例如int a = 5,那么也就是给int型变量a赋值,值为5.如果一个方法,将这个变量传进方法的内部,则进行的就是传值。在java中,有8种基本数据类型,它们分别为:int、long、float、double、char、boolean、short、byte.这8种基本的数据类型作为参数进行传递是,都是进行的传值。·除此之外,还有一种特殊的情况,String。本身String是一个引用类型,很多人认为在向方法中传递String类型参数时,是进行传引用。其实在这里,String可以看做为一个包装类,因为String其本身就是通过字符数组实现的,那么它在实现参数传递的时候,也就是以char型数据的方式进行的,也就是进行传值。

2、传引用:java中的引用可以初步的理解为地址。也是在new了一个对象后,该对象是存在JVM的Heap区,也就是堆。那么必然有一个地址要指向这个对象的在JVM中的位置,那么,指向这个对象的这个地址就可以简单的理解为“引用”。

那么,上面简单的叙述了一下“传值”和“传引用”这俩个概念。再简单的总结下就是,如果是向方法中传递值,也就是传值,那么实际就是拷贝一份数据,在方法内部进行操作。而传引用则是将一个对象的地址传递至方法内部。

书归正传,二者到底有什么区别呢?个人理解有如下几个区别:

一、“传值”传递的是一个值,而“传引用”传递的是指向一个另一块内存空间的地址;

二、“传值”实际是将一个值的拷贝传递至方法内部,这个值的原始数据是不会改变的,无论你内部进行的是何种操作,都不会改变这个源数据的值;而“传引用”传递进去的则是指向一个对象的地址,那么在方法内部进行实际操作的时候,就很可能会改变该对象的属性值(当然具体是否改变,还需要结合具体的业务)。

以上就是我理解的“传值”和“传引用”二者之间的区别。

在这里引出另外一个问题,在java中到底是只存在“传值”呢?还是既存在“传值”又存在“传引用”呢?在网上,就分成了两种意见。我认为,这只是一个角度的问题。怎么理解呢?学过汇编的同学都知道,在内存当中,无论是数据,还是代码 其本质都是二进制数据,到底是数据呢?还是代码呢?这只是将这些二进制数据根据其作用分为不同的俩类来加以区分。同样的道理,到底是值呢,还是引用呢?从本质上来讲,引用(这里简单的理解为地址)它说白了也就是一个值。那么认为只有“传值”这一种方式的同学,则是从一个更本质的角度来看待这个问题。那么,认为是两种方式的同学们也是没有问题的。因为的确二者传递至方法内部后,操作的对象是不同的,“传值”是对传进来的值,也就是8种基本数据类型外加String类进行操作,而“传引用”这是对传进来的地址指向的对象进行操作,当然也可以对传进来的“引用”进行操作。

以上就是我对这个问题的分析和理解,如果有不对的地方,或者误导大家的地方,欢迎大家指出来,让我们共同进步!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: