首先来看一段代码:

User类:

1 public classUser {2 privateString name;3

4 publicString getName() {5 returnname;6 }7

8 public voidsetName(String name) {9 this.name =name;10 }11

12 }

测试类:

1 public classDemo1 {2 public static voidmain(String[] args) {3 User user=newUser();4 List list=new ArrayList();5 list.add(user);6 user.setName("李四");7 System.out.println(list.get(0).getName());8 }9 }

大家根据自己的理解来得到自己认为输出的结果,看看和接下来打印出的结果是否一致。

程序运行结果:

这儿,就要讲到java中的值传递和引用传递概念了:

值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

根据上面的概念,我们一起来写几个demo来真正体会java中的值传递和引用传递区别:

按值传递:指的是在方法调用时,传递的参数是按值的拷贝传递。demo:

1 public classTempTest {2 private void test1(inta){3 //做点事情

4 }5 public static voidmain(String[] args) {6 TempTest t = newTempTest();7 int a = 3;8 t.test1(a);//这里传递的参数a就是按值传递

9 }10 }11

按值传递重要特点:传递的是值的拷贝,也就是说传递后就互不相关了。demo:

1 public classTempTest {2 private void test1(inta){3 a = 5;4 System.out.println("test1方法中的a="+a);5 }6 public static voidmain(String[] args) {7 TempTest t = newTempTest();8 int a = 3;9 t.test1(a);//传递后,test1方法对变量值的改变不影响这里的a

10 System.out.println(”main方法中的a=”+a);11 }12 }13

运行结果是:

按引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。demo:

1 public classTempTest {2 private voidtest1(A a){3 }4 public static voidmain(String[] args) {5 TempTest t = newTempTest();6 A a = newA();7 t.test1(a); //这里传递的参数a就是按引用传递

8 }9 }10 classA{11 public int age = 0;12 }

按引用传递的重要特点是传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。demo:

1 public classTempTest {2 private voidtest1(A a){3 a.age = 20;4 System.out.println("test1方法中的age="+a.age);5 }6 public static voidmain(String[] args) {7 TempTest t = newTempTest();8 A a = newA();9 a.age = 10;10 t.test1(a);11 System.out.println(”main方法中的age=”+a.age);12 }13 }14 classA{15 public int age = 0;16 }

运行结果是:

相信大家看了上面的例子和说明,已经对值传递和引用传递有了进一步的认识,最后再总结一下!

说明:

(1):“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。

(2):在Java里面只有基本类型和按照下面这种定义方式的String是按值传递,其它的都是按引用传递。就是直接使用双引号定义字符串方式:String str = “Java私塾”;

java的引用传递_Java的值传递和引用传递相关推荐

  1. java list引用传递_java的值传递和引用传递

    昨天博主在对于值传递和引用传递这里栽了一个大坑啊,导致一下午时间都浪费在这里,我们先说下值传递和引用传递java官方解释: 值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对 ...

  2. java 基本类型 引用类型_Java中的基本类型和引用类型变量的区别

    基本类型: 基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值. 引用类型: 是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组 ...

  3. java 引用队列_Java中管理资源的引用队列相关原理解析

    当对象改变其可达性状态时,对该对象的引用就可能会被置于引用队列(reference queue)中.这些队列被垃圾回收器用来与我们的代码沟通有关对象可达性变化的情况.这些队列是探测可达性变化的最佳方式 ...

  4. java开根号函数_Java中真的只有值传递么?

    原创: ITwalking 转载于公众号[ 编程大道] (本文非引战或diss,只是说出自己的理解,欢迎摆正心态观看或探讨) 回顾值传递和引用传递 关于Java是值传递还是引用传递,网上有不一样的说法 ...

  5. 【C++引用超详细笔记, 引用、指针和值传递的汇编级辨析,对象、继承和引用】

    文章目录 引用变量 1. 什么是引用.如何创建一个引用变量? 2. 引用的具体使用方法 2.1 引用做函数的形参 2.2 引用参数的const用法 左值.右值是什么? 2.3 结构体的引用 2.4 引 ...

  6. java中参数存储_Java中函数参数传递和数据存储

    值传递是将要传递的值作为一副本传递的.. 引用传递,传递的是引用对象的内存地址.. 例如: int i=4; int j=i;   //相当于把4复制了一个副本赋给了j 输出结果是i=4 ,j=4 C ...

  7. java 定義json并賦值_java是值传递还是引用传递?

    最近在项目中发现了类似如下的代码. import com.alibaba.fastjson.JSONObject; public class ValuePassParamTest { public s ...

  8. Java主方法引用传递_java方法中的参数传递是值传递还是引用传递(转)

    1.当参数变量为基本数据类型或者字符串时: ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) { x = x *2; } .. ...

  9. java int 传引用吗_Java的参数传递是「值传递」还是「引用传递」?

    关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题. 有人说Java中只有值传递,也有人说值传递和引用传递都是存在的,比较容易让人产生疑问. 关于值传递和引用传递其实需要分情况看待. ...

最新文章

  1. Visual Studio 2015编译Lua 5.3.4遇到的坑
  2. RSA非对称加密算法Java实现之输出key文件
  3. C的动态优化 约瑟夫环
  4. python3seek_Python seek()和tell()函数详解
  5. c# uri.host_C#| Uri.GetLeftPart()方法与示例
  6. php批量下载网络图片,php批量下载网页图片并替换路径为本地
  7. Flash发布iOS应用全攻略(二)——如何成为一个合法的iOS开发者
  8. pku2192(并查集+枚举)
  9. sock 文件方式控制宿主机_基于嵌入式Linux系统实现YAFFS2文件系统存储方案的设计...
  10. ABBYY FineReader离线激活序列号资源及如何查看PDF文档
  11. cf1111d(退背包)
  12. 007 锁存器和触发器
  13. 旷世科技面试——CV岗/后端开发
  14. Bayesian Learning via Stochastic Gradient Langevin Dynamics
  15. IO模式-BIO,NIO,AIO
  16. win7笔记本外接显示器html,笔记本接显示屏如何设置_笔记本外接显示屏的图文教程-win7之家...
  17. 如何远程控制其它电脑!
  18. latch的概念与机制
  19. C++ 硬件信息 获取主板序列号
  20. 如何将一个向量投影到一个平面上_如何理解矩阵特征值的意义?

热门文章

  1. 获取系统进程信息和进程依赖的dll信息--CreateToolhelp32Snapshot
  2. 设置服务器系统的远程登录数量,设置服务器远程登录用户数量
  3. 什么时候能用Δs判断反应进行方向_化学反应原理复习 第二章
  4. WIN32练习项目(函数调用监视器)
  5. 隐藏模块(无模块注入)
  6. 详解虚函数的实现过程之多重继承(3)
  7. python实时得到鼠标的位置
  8. 设计模式C++实现(9)——享元模式
  9. MySQL CHAR、VARCHAR、TEXT、ENUM、SET(字符串类型)
  10. 16、IN和NOT IN用法详解