参数传递(值传递与引用传递)

按值传递和按引用传递。按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。

1、对象是按引用传递的
2、Java 应用程序有且仅有的一种参数传递机制,即按值传递(引用传值传递的是原始值的内存地址,其实也是一种按值传递)
3、按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本
4、按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本

 1 public class ParamterE2 {
 2
 3     public static class ParamterE3{
 4         public String name="xiaotiaosi";
 5     }
 6
 7     public static void run(ParamterE3 paramterE3,String a,int b){
 8         ParamterE3 paramterE=paramterE3;
 9         paramterE.name="xiaohua111";
10         a="girl";
11         b=1;
12     }
13
14     public static void main(String[] args) {
15         ParamterE2 paramterE2=new ParamterE2();
16         ParamterE3 paramterE3=new ParamterE3();
17         String a="boy";
18         int b=0;
19         paramterE2.run(paramterE3,a,b);
20         System.out.println(paramterE3.name+" "+a+" "+b);
21     }
22 }

程序运行的结果为:xiaohua111 boy 0

原始对象内的成员变量name的值改变,原始String类型的变量a 和原始int类型的变量b值没有发生改变。

说明:

1.对象就是传引用
2.原始类型就是传值(boolean 、char、byte、short、int、long、float、double)
3.String类型因为没有提供自身修改的函数,每次操作都是新生成一个String对象,所以要特殊对待。可以认为是传值。

注:通过查资料发现String类型比较特殊,在Java中,String是一个引用类型,但是在作为参数传递的时候表现出来的却是基本类型的特性。
查过相关资料后我觉得是两个原因导致的,一个是String实际上操作的是char[],可以理解为String是char[]的包装类。二是给String变量重新赋值后,实际上没有改变这个变量的值,而是重新new了一个String对象,改变了新对象的值,所以原来的String变量的值并没有改变。

时间: 2024-11-06 10:01:52

参数传递(值传递与引用传递)的相关文章

java中参数传递--值传递,引用传递

java中的参数传递--值传递.引用传递 参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递. 在 Java 应用程序中永远不会传递对象,而只传递对象引用.因此是按引用传递对象.Java 应用程序按引用传递对象这一事实并不意味着 Java 应用程序按引用传递参数.参数可以是对象引用,而 Java 应用程序是按值传递对象引用的. Java 应用程序中的变量可以为以下两种类型之一:引用类型或基本类型.当作为参数传递给一个方法时,处理这两种类型的方式是相同的.两

java中方法的参数传递机制(值传递还是引用传递)

看到一个java面试题: 问:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?  答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本.指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的. 以下是从其他文章里转的,只为加深理解 public class TempTest { private void te

JavaScript 函数参数传递到底是值传递还是引用传递

tips:这篇文章是听了四脚猫的js课程后查的,深入的理解可以参看两篇博客: JavaScript数据类型--值类型和引用类型 JavaScript数据操作--原始值和引用值的操作本质 在传统的观念里,都认为JavaScript函数传递的是引用传递(也称之为指针传递),也有人认为是值传递和引用传递都具备.那么JS的参数传递到底是怎么回事呢?事实上以下的演示也完全可以用于Java 首先来一个比较简单的,基本类型的传递: function add(num){ num+=10; return num;

python的参数传递是值传递还是引用传递??

函数参数传递机制,传值和引用的是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间来存放由主调函数放进来的实参的值,从而想成为了实参的一个副本.值传递的特点是被调函数对形势参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-by-refer

python的参数传递是值传递还是引用传递?都不是!

[写在前面] 参考文章: https://www.cnblogs.com/spring-haru/p/9320493.html[偏理论,对值传递和引用传递作了总结] https://www.cnblogs.com/shizhengwen/p/6972183.html[用实例进行讲解演示] [正文部分] 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间来存放由主调函数放进来的实参的值,从而想成为了实参的一个副本.值传递的特点是被调

值传递,指针传递;引用传递(c++独有)本质

要理解值传递.指针传递和引用传递的区别,主要要理解函数的实参和形参,函数的作用域(自动变量.栈),内存的布局以及指针和引用的特点.这里主要总结三种参数传递方式使用的主要场合. 值传递:只给函数提供输入值,需要复制开销,大对象很少使用值传递. 指针传递:可以改变指针指向内容的值,但是不能改变指针本身,无需复制开销.如果需要改变指针本身,可以使用二重指针或者指针引用. 引用传递:除了提供输入值外,还返回操作结果,无需复制开销. #include<stdlib.h> //值传递,函数体内变量n是参数

Java中的值传递和引用传递

解释 1.Java中有没有引用传递? 答:Java中只有按值传递,没有按引用传递! 2.当一个对象被当作参数传递到一个方法中后,在此方法中可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递. Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言).如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的,如果在函数中改变了副本

第002弹:Java 中的值传递和引用传递

在 Java 的代码开发过程中,为了尽可能提高方法的复用性,明确方法的作用,同时防止一个方法内部过于臃肿的问题,往往会创建许多方法,那么不可避免地会涉及到参数传递的问题.通常来说,我们将 Java 中的参数传递分为两种:值传递和引用传递. 值传递:参数在进入方法时,将入参深度复制一个副本,在方法内部操作的是入参的副本,在方法执行完毕之后,外部的入参没有发生任何变化. 引用传递:在方法内部操作的是参数本身,对入参做出的修改会保留到方法的外部. 那么在 Java 中,哪些情况属于值传递,哪些情况属于

【转载】C++ 值传递、指针传递、引用传递详解

原文链接:http://www.cnblogs.com/yanlingyin/ 值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入, 不能传出.当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递. 指针传递: 形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作 引用传递: 形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数

Java中,函数参数的传递,是值传递还是引用传递

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?  答:是值传递. 可以这么理解:有一个Person(name="S"),作为参数传给一个方法,在此方法中将此Person重新设置name=“B”,那么有一下结论 ①这个Person还是这个Person,一直都是他,但是他的名字被改了,不管是原来的引用还是方法里的引用,引用的都是一个对象,所以,所有引用的值都变了 ②如果在方法中重新new了一个Person赋给参数,