**

Java中传参数–值传递和引用传递

**
在Java中,传参数分为值传递引用传递

在Java中的数据类型分为两大类:一类是引用类型,也叫类类型(除了String以外的所有复合数据类型,包括数组、类和接口),是指通过类创建的对象的变量名字,这种类型在传递的时候就要遵守“引用传递”的规则;另一种是原始类型,即为8大基本类型(字节型(byte),短整形(short),整型(int),长整型(long),字符型(char),浮点型(float),双精度(double),布尔型(boolean)),这类型的数据在调用的时候传递时遵守 “值传递” 规则的。

接下来,就分别来介绍一下值传递引用传递它们是如何进行参数传递的

一、值传递

值传递:是指方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数的改变不影响实际参数的值。
首先,可以来看一段代码:

package com.yf1020;public class Student {public void changeInt(int t) {t=100;System.out.println("这里t的值是:" +t);}
}

这里先创建了一个Student类,在该类中有有一个改变t的值的方法。
然后我们再来创建对象,调用其中的方法,代码如下:

package com.yf1020;public class Manager {/** 程序运行的入口点* */public static void main(String[] arg) {//创建对象Student st = new Student();int i = 1000;//调用方法 在changeInt中改变i的值st.changeInt(i);System.out.println("这里i的值是:" +i);}

输出结果:

通过输出结果,我们就可以去证明方法changeInt中所改变的t与i没有关系,方法中对t的改变,不会影响到调用代码中i的值。我们其实也可以这样理解,就是先看主类中的主程序,当设置i为1000时,继而将i的值传入到方法changeInt中,这样就改变了方法changeInt中的t的值,但是这不会影响在主类中i的值,仅仅是改变那个方法changeInt中的t值而已。

二、引用传递

引用传递: 也称传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
在理解引用传递之前,先明白何为引用,代码如下:

//创建对象,这里的test1类名是随意命名的,没有什么具体意义的Student st = new Student();

这段代码可以描述为: 首先声明一个Student类型的变量st,再将这个st变量名指向一个新建的Student对象。st变量是这个新建对象的名字----并不是对象数据本身!!!例如你是一个学生对象,且叫“学生甲”,当我们使用“学生甲”这个名字的时候,“引用”的就是你,但是你的实体与“学生甲”这个名字不是同一个东西,你们之间称作“学生甲”,这个名字引用了你这个对象。

看一个代码例子就马上明白了,如下:
Student类:

package com.yf1020;public class Student {private String name;public void setName(String t) {name = t;}public String getName() {return name;   }
}

主类:

package com.yf1020;public class temp {public static void main(String[] arg) {//创建对象Student st1 = new Student();st1.setName("第一个");Student st2 = new Student();st2.setName("第二个");Student st3 = new Student();st3.setName("第三个");//进行交换st1 = st2; //将st2的引用值赋给st1;st2 = st3; //将st3的引用赋值给st2;st3 = st1; //因为上面已经把st2赋给了st1,此时st1内的引用值是之前st2内的值,所以这个时候相当于将最开始st2的值赋给了st3了。String name1 = st1.getName();String name2 = st2.getName();String name3 = st3.getName();System.out.println(name1);System.out.println(name2);System.out.println(name3);}
}

输出的结果:

从最终的结果我们可以看出,st3变量名,最终指向了st2对象,即名字值被赋为“第二个”的对象。
同样地,在方法调用时,如果方法的参数是引用类型,传入的则只是一个对象名字的引用,而不是这个对象的本身!!!代码如下:

package com.yf1020;public class Teacher {public void changeST(Student st) {String newName = "改名字";st.setName(newName);}public static void main(String[] arg) {//创建对象Student st1 = new Student();//调用前,设定学生的名字st1.setName("第一个");Teacher te = new Teacher();//传入对象引用名:te.changeST(st1);String name = st1.getName();System.out.println("调用后st1的名字其实是:"+name);}
}

输出结果:

通过看输出的结果值,我们知道在te对象的changeST方法中改变了原来的值,即在调用时,main方法中的st1和changeST中的st变量名,都是指向的同一个Student对象!!!

Java中传参数--值传递和引用传递相关推荐

  1. Java中ListE对象赋值问题(引用传递和值传递)

    Java中List<E>对象赋值操作问题 业务需求是:取2个集合中的交集对象并返回.如下代码,busMap中key值和stocks中Map中的key值相等的对象则返回继续操作,也就是说剔除 ...

  2. 一文彻底搞懂Java中的值传递和引用传递!

    关于Java中方法间的参数传递到底是怎样的.为什么很多人说Java只有值传递等问题,一直困惑着很多人,甚至我在面试的时候问过很多有丰富经验的开发者,他们也很难解释的很清楚. 我很久也写过一篇文章,我当 ...

  3. Java 是值传递还是引用传递

    最近整理面试题,整理到值传递.引用传递,到网上搜了一圈,争议很大.带着一脸蒙圈,线上线下查了好多资料.最终有所收获,所以分享给大家,希望能对你有所帮助.     首先说下我的感受,这个题目出的很好,但 ...

  4. Java中的值传递和引用传递

    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?      答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为 ...

  5. 【Java基础】Java中的值传递、引用传递

    Java中的值传递.引用传递 对于一个方法而言,参数是为该方法提供信息的,而不是想让该方法改变自己.--<Java编程思想> 值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本 ...

  6. Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...

    <Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?> <Java中的值传递和引用传递> 原理知识: 如果参数类型是原始类型,那么传过来的就是这 ...

  7. c语言的指针和java引用传递参数,java传参数是传值还是引用

    1.基参数是本数据类型 传递是值(或者说值得副本). 2.参数是对象的话传递的是对象引用的副本.(1.修改引用副本指向新对象不会影响原来对象,2.修改引用指向的对象的属性会修改成功,3.如果传递时st ...

  8. java 地址传递 返回值_Java中的值传递和引用传递

    这几天一直再纠结这个问题,今天看了这篇文章有点思路了,这跟C++里函数参数为引用.指针还是有很大区别. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里 ...

  9. string 引用没有设置为 string 的实例。 参数名: s_Java中的值传递和引用传递,看完这篇终于终于明白了!...

    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?  答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数 ...

最新文章

  1. 图解yolo目标检测如何进行运动估计
  2. hdu4974 简单题
  3. Leetcode1712. 将数组分成三个子数组的方案数[C++题解]:双指针和前缀和
  4. 信息系统项目管理师:第1章:信息化与信息系统(3)-重点汇总
  5. Codeforces 374A - Inna and Pink Pony
  6. Docker搭建WebLogic服务器
  7. hanlp加载预训练模型
  8. ubuntu 下pip3 与pipenv 安装使用错误
  9. ntp协议原理linux网络编程,NTP协议
  10. 《英语语法新思维初级教程》学习笔记(四)数量限定词和个体限定词
  11. mac更新go到最新版本
  12. 苹果ios系统企业级开发者授信下载app时出现:‘此app开发者需要更新’‘出现一朵云app无法打开’有的手机可以打开有的手机无法打开情况解决方案
  13. 人脸、微笑、口罩识别
  14. 金三银四,我为面试所准备的面试题,不看要遭老罪喽
  15. RoboCupRescue心得
  16. Android Studio教程从入门到精通
  17. 通过Xshell上传文件到Linux
  18. 无盘服务器网线接法,无盘经验:解析网吧千兆网线的标准做法
  19. JavaScript中defer的作用
  20. linux音频文件格式转换,在Ubuntu @ Linux 中音频和音乐文件的格式转换

热门文章

  1. Jenkins Pipeline构建流水线发布
  2. Jmeter Loadrunner高级性能测试真实曝光
  3. 全网最全的Postman接口自动化测试(小鸟成大鸟级攻略)
  4. Python游戏开发pygame模块,Python实现吃豆人,儿时的回忆
  5. mysql没有err文件_xampp中的mysql启动时无法产生err文件
  6. 【PHPExcel】生成xls文件并下载
  7. sar极化想干矩阵_用于PolSAR图像分类的极化卷积网络
  8. python主成分分析相关系数_python如何进行主成分分析
  9. nuxt 如何引入js_nuxtjs如何在单独的js文件中引入store和router
  10. biopython安装_BioPython的安装和使用