Java是值传递还是引用传递

一、概述

在 Java 语言中,本质只有值传递,而无引用传递。

二、值类型和引用类型

值类型就是Java 中的 8 大基础数据类型:

  • 整数型:byte、short、int、long
  • 浮点型:float、double
  • 字符类型:char
  • 布尔类型:boolean

所谓的值类型指的是在赋值时,直接在栈中(Java 虚拟机栈)生成值的类型。

引用类型是指除值类型之外的数据类型,比如:

  • 类、接口
  • 数组
  • 字符串
  • 包装类(Integer、Double…)

所谓的引用类型是指,在初始化时将引用生成栈上,而值生成在堆上的这些数据类型。

三、值传递和引用传递

1、值传递(Pass By Value)指的是方法传参时,传递的是原内容的副本,因此对副本进行如何修改都不会影响原内容。

public class PassValueTest {public static void main(String[] args) {int age = 18;System.out.println("调用方法before:" + age);intTest(age);System.out.println("调用方法after:" + age);}private static void intValueTest(int age) {age = 33;System.out.println("方法中修改:" + age);}
}
//运行结果///
调用方法before:18方法中修改:33调用方法after:18

在方法中修改参数并未影响原内容,我们把这种传参方式称之为值传递。

2、引用传递(Pass By Reference)指的是方法传参时,传递的是参数本身,因此对参数进行任意修改都会影响原内容。

/**“引用传递”*/
public class PassByReferenceValue {public static void main(String[] args) {char[] name = {'宇', '哥'};System.out.println("调用方法before:" + new String(name));paramReferenceTest(name);System.out.println("调用方法after:" + new String(name));}private static void paramReferenceTest(char[] n) {n[1] = '神';System.out.println("方法中修改为:" + new String(n));}
}//运行结果///
调用方法before:宇哥方法中修改为:宇神调用方法after:宇神public class PassByReferenceValue {public static void main(String[] args) {char[] name = {'宇', '哥'};System.out.println("调用方法before:" + new String(name));paramReferenceTest(name);System.out.println("调用方法after:" + new String(name));}private static void paramReferenceTest(char[] n) {n = new char[2]; // 添加此行代码n[1] = '神';System.out.println("方法中修改为:" + new String(n));}
}//运行结果///
调用方法before:宇哥方法中修改为:神调用方法after:宇哥

当我们在 paramReferenceTest方法中添加 new char[] 之后,“引用传递”就突然变值传递了?为什么?

这是因为,在 Java 语言中本质上只有值传递,也就说 Java 的传参只会传递它的副本,并不会传递参数本身。

前面那个带引号的“引用传递”其实只是传递了它的引用副本,

四、总结;

在 Java 语言中只有值传递,方法传参时只会传递副本信息而非原内容。我们还知道了基础数据类型会直接生成到栈上,而对象或数组则会在栈和堆上都生成信息,并将栈上生成的引用,直接指向堆中生成的数据。

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. 大写的服!中科大博士20万字论文:如何给女朋友送礼物
  2. java-分支重载以及构造方法
  3. linux分区合并不损坏系统,一次Linux磁盘损坏导致系统不可用恢复实例
  4. 《OpenCV3编程入门》 札记
  5. Python 中名词
  6. java委托机制教程_通过反射实现Java下的委托机制代码详解
  7. 【多元域除法】多项式除法电路原理及MATLAB详解
  8. 19-A Walk-based Model on Entity Graphs for Relation Extraction(句内多对,多关系,多元,2018ACL
  9. python找与7相关的数_用python统计并输出1000以内所有能同时被3和7整除的数的个数?...
  10. Spring Cloud Alibaba——Nacos实现服务治理
  11. input hidden用法
  12. 简述导线平差计算的五个步骤_RTK技术导线测量和全站仪导线测量有什么区别?...
  13. 东拉西扯:Facebook的身价
  14. 递归典型——汉诺塔问题
  15. 2021年机修钳工(中级)及机修钳工(中级)复审模拟考试
  16. intelliJ IDEA 2017 破解方法
  17. 关于求余运算(余数为正)
  18. 如果你是互联网创业者,这个视频值1万元
  19. (2020.11)OAI搭建eNB without S1 usrpx310 (usrp2944)
  20. Jenkins项目配置-maven项目-全面

热门文章

  1. 新疆伊犁2010年2月17日特大车祸
  2. Rosetta如何连接隐私计算与AI?道翰天琼认知智能机器人平台API接口大脑为您揭秘。
  3. c++智能指针用法详解
  4. centos7手动修改dns
  5. SpringBoot2整合富文本编辑器wangEditor(含文件上传)攻略
  6. 时刻鼓舞自己的话 当心情不好时就看看
  7. 传播时延和传输时延的差异
  8. html5标题标语,知识产权宣传标语
  9. 微信小程序中百分百实现聊天界面
  10. 小孔能增强低音?什么是音箱倒相孔