更多免费教学文章请关注这里

首先来看一段代码:

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私塾”;

值传递与引用传递区别,具体表现相关推荐

  1. Java值传递与引用传递的区别

    Java值传递与引用传递 文章目录 Java值传递与引用传递 前景 实参与形参 值传递与引用传递 Java中的值传递 总结 前景 关于这个问题,引发过很多广泛的讨论,看来很多程序员对于这个问题的理解都 ...

  2. Python中值传递和引用传递区别

    原文:http://blog.csdn.net/xuqiaobo/article/details/72236539 举例,函数参数如果是dic,都不需要返回值,原值就被改变了 def aa(dic): ...

  3. c++值传递,指针传递,引用传递以及指针与引用的区别

    值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入, 不能传出.当函数内部需要修改参数,并且不希望这个改变影 ...

  4. 形参与实参, 值传递与引用传递, ref参数与out参数的区别和联系?

    一. 形参与实参 1.先来一例子: fun(int a) {........} Main () {   int b=0;   fun(b); } 其中,a是形参,b是实参. 2.再看理论定义 形参出现 ...

  5. 三分钟让你掌握JavaScript中值传递和引用传递的区别

    值传递:传递的是实际参数的一个副本.基本数据类型Undefined,Null,Boolean,Number.String都是值传递. 引用传递:传递的是实际参数的地址.引用数据类型Object,Arr ...

  6. java中的就近原则、方法中值传递和引用传递的区别、什么是构造方法、this关键字用法、什么是封装

    你知道java中的就近原则嘛? package com.Test.java; /*** * 在java里面有一个"就近原则"详情可以参照下面代码**/public class Ac ...

  7. JS函数传参时:值传递与引用传递的区别

    JS函数传参时:值传递与引用传递的区别 一.先分析基础数据与复杂数据的区别 : 基本数据类型:Undefined.Null.Boolean.Number.String 引用数据类型:对象 如:var ...

  8. 论JS函数传参时:值传递与引用传递的区别

    JS函数传参时:值传递与引用传递的区别? 值传递:值传递的数据为基本数据类型,基本数据类型在内存中存放的是数值本身:值传递为单向传递,只能由实参传递给形参. 引用传递:引用传递的数据为复杂数据类型,复 ...

  9. java中的值传递和引用传递的区别?

    1.值传递概念:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数. 实例: public class Main {public static ...

最新文章

  1. 明朝是中国历史上最有骨气的王朝?【ZZ】
  2. jenkins自动化部署工具
  3. Java调用库文件(JNI)(android对此有所改变)
  4. 对象数组 排序-根据其中一个属性
  5. Python SQLAlchemy入门教程
  6. python分析nginx日志的ip(中篇一)
  7. 嵌入式linux调试技术
  8. nohup xxx 后台进程关闭,可以这样避免
  9. 代码不会骗人,但有时注释会
  10. Python源码深度解析—引用计数
  11. WINDOWS自带md5校验工具
  12. 翻译:web制作、开发人员需知的Web缓存知识
  13. 次坐标从0开始_全站仪使用方法及坐标计算,讲解得真仔细!建议收藏!
  14. Excel中文转拼音【真正的完整版】 拼音 驼峰命名专用
  15. 2018-8-10-git-push-错误-hook-declined-
  16. python 循环十次_python机器学习——十次交叉验证训练的数据准备算法
  17. 叶酸修饰四氧化三铁纳米颗粒(FA-Fe3O4)|Cys-Fe3O4/CuS@BSA|巯基修饰的四氧化三铁磁性纳米颗粒齐岳供应
  18. redis,Redis Desktop Manger和IDEA Iedis的安装和使用
  19. SISD、MIMD、SIMD、MISD_设计失控
  20. 检查两个单词是否为变位词(Anagram)

热门文章

  1. 智能指针(一):STL auto_ptr实现原理
  2. 《An Introduction to Ray Tracing》—— 3.3 Ray-Surface Intersections
  3. 不限流量的物联卡是否真存在
  4. java学习(三)内部类
  5. oracle lock 1,Oracle試用 DBMS_LOCK.sleep(1);權限問題
  6. bcb image 动态大小_论车载音箱系统Limiter(限幅器)Threshold与Image(声像)稳定度的关系...
  7. Dialog对话框全解
  8. [USACO13OPEN]What's Up With Gravityp【最短路 / SPFA】
  9. 品高打造西科大教育云,带你看懂高教云建设之路
  10. python hello world