Java是值传递还是引用传递
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是值传递还是引用传递相关推荐
- Java中的值传递和引用传递
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为 ...
- Java值传递与引用传递
Java面试题: 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答案基本上是:值传递 说明:得出这种结论的前提必须是&qu ...
- Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递?
来自:沉默王二 在逛 Stack Overflow 的时候,发现了一些访问量像阿尔卑斯山一样高的问题,比如说这个:Java 到底是值传递还是引用传递?访问量足足有 188万+,这不得了啊!说明有很多很 ...
- java 引用传递_详解java的值传递、地址传递、引用传递
详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...
- Java中传参数--值传递和引用传递
** Java中传参数–值传递和引用传递 ** 在Java中,传参数分为值传递和引用传递. 在Java中的数据类型分为两大类:一类是引用类型,也叫类类型(除了String以外的所有复合数据类型,包括数 ...
- java的引用传递_Java的值传递和引用传递
首先来看一段代码: User类: 1 public classUser {2 privateString name;3 4 publicString getName() {5 returnname;6 ...
- java引用传递关键字_Java值传递和引用传递
Java值传递和引用传递 1 什么是Java值传递和引用传递 在Java中只有值传递,而没有引用调用.如果我们调用传递值的方法,则称为按值调用.在调用方法中完成的更改在调用方法时不受影响. 2 Jav ...
- java中的值传递和引用传递问题
值传递与引用传递 最近学基础的时候,老师讲了值传递和引用传递,这个问题一直不太明白,上网查了很多资料,按照自己的理解整理了一遍,发现之前不太明白的地方基本上想明白了,如有不正确的地方,欢迎指正,谢谢. ...
- 【Java基础】Java中的值传递、引用传递
Java中的值传递.引用传递 对于一个方法而言,参数是为该方法提供信息的,而不是想让该方法改变自己.--<Java编程思想> 值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本 ...
- Java中值传递和引用传递原理以及区别
Java在参数传递时有两种:一种是按值传递,一种是按引用传递 值传递:值传递是指在调用方法时将实际参数复制一份传递到方法中,也就是说,在调用方法时,实际参数把他的值的副本传递给对应的形式参数.(注意这 ...
最新文章
- 大写的服!中科大博士20万字论文:如何给女朋友送礼物
- java-分支重载以及构造方法
- linux分区合并不损坏系统,一次Linux磁盘损坏导致系统不可用恢复实例
- 《OpenCV3编程入门》 札记
- Python 中名词
- java委托机制教程_通过反射实现Java下的委托机制代码详解
- 【多元域除法】多项式除法电路原理及MATLAB详解
- 19-A Walk-based Model on Entity Graphs for Relation Extraction(句内多对,多关系,多元,2018ACL
- python找与7相关的数_用python统计并输出1000以内所有能同时被3和7整除的数的个数?...
- Spring Cloud Alibaba——Nacos实现服务治理
- input hidden用法
- 简述导线平差计算的五个步骤_RTK技术导线测量和全站仪导线测量有什么区别?...
- 东拉西扯:Facebook的身价
- 递归典型——汉诺塔问题
- 2021年机修钳工(中级)及机修钳工(中级)复审模拟考试
- intelliJ IDEA 2017 破解方法
- 关于求余运算(余数为正)
- 如果你是互联网创业者,这个视频值1万元
- (2020.11)OAI搭建eNB without S1 usrpx310 (usrp2944)
- Jenkins项目配置-maven项目-全面