值传递与引用传递区别,具体表现
更多免费教学文章请关注这里
首先来看一段代码:
User类:
复制代码1 public class User {2 private String name;3 4 public String getName() {5 return name;6 }7 8 public void setName(String name) {9 this.name = name;
10 }
11
12 }
复制代码
测试类:
复制代码
1 public class Demo1 {2 public static void main(String[] args) {3 User user=new User();
4 List<User> list=new ArrayList<User>();
5 list.add(user);
6 user.setName("李四");
7 System.out.println(list.get(0).getName());
8 }
9 }
复制代码
大家根据自己的理解来得到自己认为输出的结果,看看和接下来打印出的结果是否一致。
程序运行结果:
这儿,就要讲到java中的值传递和引用传递概念了:
值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。
根据上面的概念,我们一起来写几个demo来真正体会java中的值传递和引用传递区别:
按值传递:指的是在方法调用时,传递的参数是按值的拷贝传递。demo:
复制代码1 public class TempTest {2 private void test1(int a){3 //做点事情4 }5 public static void main(String[] args) {6 TempTest t = new TempTest();7 int a = 3;8 t.test1(a);//这里传递的参数a就是按值传递9 }
10 }
11
复制代码
按值传递重要特点:传递的是值的拷贝,也就是说传递后就互不相关了。demo:
复制代码1 public class TempTest {2 private void test1(int a){3 a = 5;4 System.out.println("test1方法中的a="+a);5 }6 public static void main(String[] args) {7 TempTest t = new TempTest();8 int a = 3;9 t.test1(a);//传递后,test1方法对变量值的改变不影响这里的a
10 System.out.println(”main方法中的a=”+a);
11 }
12 }
13
复制代码
运行结果是:
按引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。demo:
复制代码1 public class TempTest {2 private void test1(A a){3 }4 public static void main(String[] args) {5 TempTest t = new TempTest();6 A a = new A();7 t.test1(a); //这里传递的参数a就是按引用传递8 }9 }
10 class A{11 public int age = 0;
12 }
复制代码
按引用传递的重要特点是传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。demo:
复制代码1 public class TempTest {2 private void test1(A a){3 a.age = 20;4 System.out.println("test1方法中的age="+a.age);5 }6 public static void main(String[] args) {7 TempTest t = new TempTest();8 A a = new A();9 a.age = 10;
10 t.test1(a);
11 System.out.println(”main方法中的age=”+a.age);
12 }
13 }
14 class A{15 public int age = 0;
16 }
复制代码
运行结果是:
相信大家看了上面的例子和说明,已经对值传递和引用传递有了进一步的认识,最后再总结一下!
说明:
(1):“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。
(2):在Java里面只有基本类型和按照下面这种定义方式的String是按值传递,其它的都是按引用传递。就是直接使用双引号定义字符串方式:String str = “Java私塾”;
值传递与引用传递区别,具体表现相关推荐
- Java值传递与引用传递的区别
Java值传递与引用传递 文章目录 Java值传递与引用传递 前景 实参与形参 值传递与引用传递 Java中的值传递 总结 前景 关于这个问题,引发过很多广泛的讨论,看来很多程序员对于这个问题的理解都 ...
- Python中值传递和引用传递区别
原文:http://blog.csdn.net/xuqiaobo/article/details/72236539 举例,函数参数如果是dic,都不需要返回值,原值就被改变了 def aa(dic): ...
- c++值传递,指针传递,引用传递以及指针与引用的区别
值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入, 不能传出.当函数内部需要修改参数,并且不希望这个改变影 ...
- 形参与实参, 值传递与引用传递, ref参数与out参数的区别和联系?
一. 形参与实参 1.先来一例子: fun(int a) {........} Main () { int b=0; fun(b); } 其中,a是形参,b是实参. 2.再看理论定义 形参出现 ...
- 三分钟让你掌握JavaScript中值传递和引用传递的区别
值传递:传递的是实际参数的一个副本.基本数据类型Undefined,Null,Boolean,Number.String都是值传递. 引用传递:传递的是实际参数的地址.引用数据类型Object,Arr ...
- java中的就近原则、方法中值传递和引用传递的区别、什么是构造方法、this关键字用法、什么是封装
你知道java中的就近原则嘛? package com.Test.java; /*** * 在java里面有一个"就近原则"详情可以参照下面代码**/public class Ac ...
- JS函数传参时:值传递与引用传递的区别
JS函数传参时:值传递与引用传递的区别 一.先分析基础数据与复杂数据的区别 : 基本数据类型:Undefined.Null.Boolean.Number.String 引用数据类型:对象 如:var ...
- 论JS函数传参时:值传递与引用传递的区别
JS函数传参时:值传递与引用传递的区别? 值传递:值传递的数据为基本数据类型,基本数据类型在内存中存放的是数值本身:值传递为单向传递,只能由实参传递给形参. 引用传递:引用传递的数据为复杂数据类型,复 ...
- java中的值传递和引用传递的区别?
1.值传递概念:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数. 实例: public class Main {public static ...
最新文章
- 明朝是中国历史上最有骨气的王朝?【ZZ】
- jenkins自动化部署工具
- Java调用库文件(JNI)(android对此有所改变)
- 对象数组 排序-根据其中一个属性
- Python SQLAlchemy入门教程
- python分析nginx日志的ip(中篇一)
- 嵌入式linux调试技术
- nohup xxx 后台进程关闭,可以这样避免
- 代码不会骗人,但有时注释会
- Python源码深度解析—引用计数
- WINDOWS自带md5校验工具
- 翻译:web制作、开发人员需知的Web缓存知识
- 次坐标从0开始_全站仪使用方法及坐标计算,讲解得真仔细!建议收藏!
- Excel中文转拼音【真正的完整版】 拼音 驼峰命名专用
- 2018-8-10-git-push-错误-hook-declined-
- python 循环十次_python机器学习——十次交叉验证训练的数据准备算法
- 叶酸修饰四氧化三铁纳米颗粒(FA-Fe3O4)|Cys-Fe3O4/CuS@BSA|巯基修饰的四氧化三铁磁性纳米颗粒齐岳供应
- redis,Redis Desktop Manger和IDEA Iedis的安装和使用
- SISD、MIMD、SIMD、MISD_设计失控
- 检查两个单词是否为变位词(Anagram)
热门文章
- 智能指针(一):STL auto_ptr实现原理
- 《An Introduction to Ray Tracing》—— 3.3 Ray-Surface Intersections
- 不限流量的物联卡是否真存在
- java学习(三)内部类
- oracle lock 1,Oracle試用 DBMS_LOCK.sleep(1);權限問題
- bcb image 动态大小_论车载音箱系统Limiter(限幅器)Threshold与Image(声像)稳定度的关系...
- Dialog对话框全解
- [USACO13OPEN]What's Up With Gravityp【最短路 / SPFA】
- 品高打造西科大教育云,带你看懂高教云建设之路
- python hello world