Java里的传值实际上是拷贝引用,而不是拷贝对象。
如果是以基本数据类型(包括String类)做参数进行传递,或以某个类名(包括数组名)为类型做为参数而
直接对其类进行操
作(非类的属性),这样的传递叫值传递;
如果是以某个类名为类型做为参数进行传递而
针对该类的属性进行的操作,这样的传递叫做引用传递。
也就是说在值传递的过程中其操作不会对所传进来的对象有任何的影响,它传进来的只是该对象的一个副本,其本身不会有任
何的改变;而引用传递则传进来的是该对象的一个别名,即引用该对象在虚拟机中的“地址”,因此引用传递会对该“地址”的内
部属性产生影响,而不会改变该“地址”在虚拟机中的位置,即引用传递在外部看来是没有发生过任何变话的,但从内部看来,
它的属性会随着调用它的方法的改变而改变
因此,也有人说JAVA只有“值传递”,而没有引用传递。
一个简单的例子:
public class test{
public static void swap(String[] name){
String temp;
temp = name[0];
name[0] = name[1];/*传进去的虽然是一个副本,但是修改了数组的属性,对该数组的属性进行了操作,属于引用传递.*/
name[1] = temp;
}
public static void swap(String name0, String name1){
String temp;
temp = name0;
name0 = name1;
name1 = temp;
}
public static void main(String[] args){
String[] name = {"a","b"};
String name0 = "a";
String name1 = "b";
swap(name0, name1);
System.out.println(name0+","+name1);
swap(name); System.out.println(name[0]+","+name[1]);
}
}
}
输出为:
a,b
b,a
*************************************************************
按值传递:
8中基本数据类型(int,short int ,long int, double, float, char, byte,boolean)和String,Integer,Char,Double等基本数据类型的包装类
特点:在内存中复制一份数据,把复制后的数据传递到方法内部
作用:在方法内部改变参数的值,外部数据不会跟着发生改变,既不受影响。
简单地说,如果在方法中修改了传入实参变量的值,方法调用结束后,那个在调用的端的实参不会改变。
按引用传递:
除String ,Integer,Char等基本类型包装类以外的其他引用类型(对象)和数组.
热点:将对象引用的副本传递到方法内部
作用:在方法内部修改对象的内容,外部数据也会跟着发生变化。
与传值传递方式正好不同,按引用传递是指每次传递时实参时,把实参在内存中的引用(存储地址)复制一份,然后把副本传递到方法内部。
*********************************************************************
传值与传址是相对于方法而言的。什么为传。要有东西才是传。
例如:
Class Test{
int num=10;
Test A = new Test();此处的对象A是类Test的新实例,A的num为10;
A.num=20;
Test B = new Test();
B.num=30;
Test C = new Test();
}
在main方法中各打印出对象A,B,C的num,得到的值为20,30,10。可知A,B,C都是新的实例。互不影响。
传值与传址是在一个方法里传入,如public void method(Test test){
}
传入等于创建了一个副本。根据具体情况分析。
如public void change(int num){
num = num +10;
}
改变的只是副本,值无变化,如果再第一个num加this。改变的就是本身了,有变化。
如
public void change(Test test){
test.a=test.a+10
}
虽然改变的是副本的信息,但是副本和正本的指针指向同一地址,所以改变的是属性,会有变化。慢慢分析了解吧
分享到:
相关推荐
1. 传值与传址的区别 传值就是传入一个参数的值,传址就是传入一个参数的地址,也就是内存的地址(相当于指针)。他们的区别是如果函数里面对传入的参数重新赋值,函数外的全局变量是否相应改变:用传值传入的参数是...
Java是传值还是传址引用
在面向对象编程中,传值和传址是很重要的概念,如果没有好好理解其中的意思,会导致程序出现非预期的问题。 请从例子中认真体会,各个变量是如何传递的。
主要介绍了PHP传参之传值与传址的区别,十分的简单,大家通过实例简单对比下就明白了,有需要的小伙伴可以参考下。
介绍了变量的作用域,传值,传址的一些简单使用,有需要的朋友可以参考一下
js代码-函数调用的传值和传址
字符串单独说明,因为它的特殊性,无法确定是传递引用还是复制数值(因为字符串的值是没法改变的,所以纠结这个问题也是没意义的)但是用于比较的时候显然是属于传值比较(稍后具体说比较的事) 下面讲一下在使用中...
传址就是将地址传到所调用的函数里面操作,实参的值也会跟着变化,传址的有数组和字符串string。 上面说的就牵扯到数据的分类,分为值类型和引用类型,值类型的就是传值的那种,引用类型包括字符串类型,数组和...
主要介绍了javascript的变量、传值、传址、参数之间关系的相关资料,需要的朋友可以参考下
VB 参数传递(传值 ByVal 与传址 ByRef) VB 中的参数传递方式有两种:传值(ByVal)和传址(ByRef)。这两种方式决定了在过程调用时,主调过程和被调过程之间的数据传递方式。 传值方式(ByVal) 在 VB 中,传值...
软件评测师考试官方教程缺少软考共同部分的基础知识,给备考增加...3.6 传值与传址 77 4 数据结构与算法 79 4.1 数据结构基础概念 79 4.2 常用的数据结构 79 4.3 算法概述 80 4.4 算法的时间复杂度 80 5 多媒体基础知识
一门编程语言的核心是数据结构,粗略来讲,可以把数据结构分成不可变类型(immutable)和可变类型(mutable)。