一.声明

Java中没有引用传递

二.值传递和引用传递

值传递:就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内,对该参数值的修改不影响原来的实参。

引用传递:是在方法调用的时候,实参将自己的地址传递给形参,此时方法内对该参数值的改变,就是对该实参的实际操作。

三.举证

3.1 做运算

private static int baseValue= 30;public static void updateBaseValue(int value){value = 2 * value;}public static void main(String[] args) {System.out.println("调用前baseValue的值:"+baseValue);updateBaseValue(baseValue);System.out.println("调用后baseValue的值:"+baseValue);}

结果:

调用前baseValue的值:30

调用后baseValue的值:30

可以看到,baseValue的值并没有发生变化。

结果分析:

1)value被初始化为baseValue值的一个拷贝(30)

2)value被乘以2后等于60,但baseValue的值仍为30

3)这个方法结束后,参数变量value不再使用,被回收。

3.2 基本数据类型的交换

public static void main(String[] args) {int A = 2;int B = 3;swap(A, B);System.out.println("swap后A的结果为:"+A);System.out.println("swap后B的结果为:"+B);}public static void swap(int a, int b){int tmp = a;a = b;b = tmp;}

结果:

swap后A的结果为:2

swap后B的结果为:3

结果分析:

1)ab被初始化为AB值的一个拷贝(a=2;b=3)

2)ab的值被交换后,但AB的值没有变化

3)这个方法结束后,参数变量ab不再使用,被回收。

3.3 引用数据类型的交换

public class User {private String name;private int age;public User(String name, int age) {this.name=name;this.age=age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String toString() {return "name:"+name+ "  age:"+age;}
}
public static void main(String[] args) {User user1 = new User("zhangsan",20);User user2 = new User("lisi",22);System.out.println("交换前user1:" + user1 + "-》 user2:" + user2);swap(user1,user2);System.out.println("交换后user1:" + user1 + "-》 user2:" + user2);}private static void swap(User user1, User user2) {User tmp = v;user1 = user2;user2 = tmp;}

结果:

交换前user1:name:zhangsan age:20-》 user2:name:lisi age:22

交换后user1:name:zhangsan age:20-》 user2:name:lisi age:22

结果分析:

执行swap方法:

swap方法结束后,临时副本user1和user2被回收

原user1和user2变量仍然指向之前的对象,没有任何改变

3.4 你以为是引用传递,实际并不是

public static void updateUserInfo(User student){student.setName("erniu");student.setAge(20);}public static void main(String[] args) {user = new User("cuihua",22);System.out.println("调用前user的值:"+user.toString());updateUserInfo(user);System.out.println("调用后user的值:"+user.toString());}

结果:

调用前user的值:name:cuihua age:22

调用后user的值:name:erniu age:20

结果分析:

当updateUserInfo方法执行完后,参数变量student不再使用,被回收。

【JAVA】值传递与引用传递相关推荐

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

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

  2. Java值传递与引用传递

    Java面试题: 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答案基本上是:值传递 说明:得出这种结论的前提必须是&qu ...

  3. Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递?

    来自:沉默王二 在逛 Stack Overflow 的时候,发现了一些访问量像阿尔卑斯山一样高的问题,比如说这个:Java 到底是值传递还是引用传递?访问量足足有 188万+,这不得了啊!说明有很多很 ...

  4. java 引用传递_详解java的值传递、地址传递、引用传递

    详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...

  5. Java中传参数--值传递和引用传递

    ** Java中传参数–值传递和引用传递 ** 在Java中,传参数分为值传递和引用传递. 在Java中的数据类型分为两大类:一类是引用类型,也叫类类型(除了String以外的所有复合数据类型,包括数 ...

  6. java的引用传递_Java的值传递和引用传递

    首先来看一段代码: User类: 1 public classUser {2 privateString name;3 4 publicString getName() {5 returnname;6 ...

  7. java引用传递关键字_Java值传递和引用传递

    Java值传递和引用传递 1 什么是Java值传递和引用传递 在Java中只有值传递,而没有引用调用.如果我们调用传递值的方法,则称为按值调用.在调用方法中完成的更改在调用方法时不受影响. 2 Jav ...

  8. java中的值传递和引用传递问题

    值传递与引用传递 最近学基础的时候,老师讲了值传递和引用传递,这个问题一直不太明白,上网查了很多资料,按照自己的理解整理了一遍,发现之前不太明白的地方基本上想明白了,如有不正确的地方,欢迎指正,谢谢. ...

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

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

  10. Java中值传递和引用传递原理以及区别

    Java在参数传递时有两种:一种是按值传递,一种是按引用传递 值传递:值传递是指在调用方法时将实际参数复制一份传递到方法中,也就是说,在调用方法时,实际参数把他的值的副本传递给对应的形式参数.(注意这 ...

最新文章

  1. python条件语句-Python3 条件控制
  2. 移动机器人平台的坐标系---map,odom,base_link
  3. python元组是数组吗,Python基础(4)——数组元组
  4. get pid and kill
  5. 从零开始学习OpenCL开发(一)架构
  6. dalvik Java类库中本地类
  7. Cannot resolve bean 'xxx' less... (Ctrl+F1) Inspection info:Checks autowir
  8. 属性总结(一):marker
  9. html表格中绑定显示xml文档内容的简单实例,JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)...
  10. 前端学习(1354):集合关联
  11. 关于c++的一些案例
  12. 根据Ping(ICMP协议)得到TTL并分析
  13. (149)System Verilog接口(interface)连线待测模块
  14. linux服务器拓扑图,Linux服务器作为网关的DNS分离解析服务(CentOS 7版本)
  15. 60-100-028-使用-MySQL 主从复制
  16. 排序算法之归并排序(JAVA)
  17. 腾讯滑块验证码识别和加速度模拟(1)
  18. 额外参数_Redis的复制参数学习笔记
  19. 成为技术主管需要做到的三点
  20. 三菱Q系列plc11轴运动控制程序

热门文章

  1. python基于django的个人电子相册系统
  2. 三层架构 - 表现层(界面层、Web层 - MVC)、业务逻辑层(Service)、数据访问层(DAO)
  3. java 读取ini配置文件
  4. 倒相孔音箱和密闭音箱的知识介绍
  5. 书籍 - 2018.07.10
  6. 旷视科技face++ AI工程师面经·
  7. 买手机的注意事项(不断补充)
  8. 将路径中的“\\”换成“/”的方法
  9. SRAM和DRAM的区别及内存条的选择
  10. 安装keepalived所需rpm包安装顺序以及离线下载rpm包方式