值传递:在调用函数的时候,将实际参数复制一份传递到函数中,这样在函数中对参数进行修改的时候,就不会影响到原来的实际参数
引用传递:在调用函数的时候,将实际参数的地址直接传递函数中,这样在函数中对参数进行修改的时候,就会影响到实际参数值传递                    引用传递
根本区别    会创建一个副本(copy)        不创建副本
结果        函数中无法改变原来的对象    函数可以改变原来的对象将对象创建好了之后将信息传给了函数
在函数中对原来传入的值进行了改变,
主函数中的对象的值也改变了.
那么这里就是引用传递,并且所有的对象的地址都是相同
只要有一个函数对其进行了改变,那么对象的值就变了
java中的基本年数据类型都是值传递,引用数据类型中的String也是值传递
引用数据类型除了String之外都是引用传递

值传递

package cn.java.Demo;/*** 通过运行结果我们知道,str的值发生了改变,但是s的值没有发生改变还是原来的值* 所有* String类型是一个值传递* 调用函数对String类型进行赋值的时候,   str = "哈哈哈哈"; 相当于做了一个创建* 对象的操作   str = new String("哈哈哈哈");* 这里我们可以理解为变量str重新创建了一个新的对象指向新的地址*/
public class Demo_02 {public void pass(String str){System.out.println("str === " + str.hashCode());str = "哈哈哈哈";System.out.println("str = " + str);System.out.println("str === " + str.hashCode());}public static void main(String[] args) {Demo_02 demo_02 = new Demo_02();String s = "呵呵呵";System.out.println("s === " + s.hashCode());demo_02.pass(s);System.out.println("s = " + s);System.out.println("s === " + s.hashCode());}
}

运行结果:

引用传递:

先创建一个实体类:

package cn.java.Demo;public class User {private String name;private Integer age;public User() {}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;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}
}
/*** 将对象创建好了之后将信息传给了函数* 在函数中对原来传入的值进行了改变,* 主函数中的对象的值也改变了.* 那么这里就是引用传递,并且所有的对象的地址都是相同* 只要有一个函数对其进行了改变,那么对象的值就变了* java中的基本年数据类型都是值传递,引用数据类型中的String也是值传递* 引用数据类型除了String之外都是引用传递*/
public class Demo_03 {public void pass(User user){System.out.println("2     " + user.hashCode());user.setName("李四");user.setAge(20);System.out.println(user.toString());System.out.println("3     " + user.hashCode());}public static void main(String[] args) {Demo_03 demo_03 = new Demo_03();User user = new User("张三",18);System.out.println("1     " + user.hashCode());System.out.println(user.toString());demo_03.pass(user);System.out.println(user.toString());System.out.println("4     " + user.hashCode());}
}

运行结果:

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. 基于OpenCV的车辆变道检测
  2. iReport使用方法
  3. linux-java
  4. 理解AppDomain
  5. html5 head 标签
  6. 【JVM】浅谈双亲委派和破坏双亲委派
  7. navicat for mysql 13_Navicat for MySQL下载
  8. 1012. 数字分类 (20)-PAT乙级真题
  9. VC++调试方法和技巧
  10. HFSS器件导入Altium 教程
  11. 松下FP系列PLC以太网通讯
  12. c盘瘦身。清理四个垃圾文件夹
  13. Debian 7修改SSH端口并设置防火墙端口放行
  14. nyoj845无主之地1
  15. Jersey框架和springmvc框架
  16. Word2003入门动画教程25:添加或改变Word页面边框
  17. 原生js实现放大镜效果
  18. 第三届世界5G大会召开之前,我们来复习一下这本6G白皮书
  19. Android Hawk数据库
  20. 【FPGA】时序逻辑电路——基于计数器实现一个以1秒频率闪烁的LED灯

热门文章

  1. mc 手游无限挑战服务器,新版本的诱惑 弹弹堂手游无限挑战你敢来吗
  2. 数值分析——LU分解求解线性方程组的Python实现
  3. 考试用计算机反思800字,考试后的反思
  4. 3D成像方法 汇总(原理解析)--- 双目视觉、激光三角、结构光、ToF、光场、全息...
  5. 计算机一次就好音乐普,杨宗纬一次就好歌曲简谱
  6. 职场奇袭!3分钟完成一天工作!
  7. Mysql_基本操作命令
  8. 科研化的稀土掺杂上转换纳米材料BaGdF5:Yb3+/Er3+的应用
  9. JavaWeb-Day01
  10. 项目部署到Tomat报异常:jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending ...