java中的值传递与引用传递
项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步
在java中,如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,如果在函数中改变了副本的 值不会改变原始的值。
如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的 值,那么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的 地址,所以不会改变参数的值。
传递值的数据类型:八种基本数据类型和String(这样理解可以,但是事实上String也是传递的地址,只是string对象和其他对 象是不同的,string对象是不能被改变的,内容改变就会产生新对象。那么StringBuffer就可以了,但只是改变其内容。不能改变外部变量所指 向的内存地址)。
传递地址值的数据类型:除String以外的所有复合数据类型,包括数组、类和接口
为了对上面参数传递有更清楚的认识,可以参考如下的测试代码:
public class ParamTransferTest {public static void swapnum(int a, int b) {int tmp = a;a = b;b = tmp;}public static class Person {public String name;public int age;public Person(String name, int age) {this.name = name;this.age = age;}public void changeattr(Person p, String name, int age) {p.name = name;p.age = age;}public void printp() {System.out.println(this.name + ", " + this.age);}}public static void main(String[] args) {int a = 1, b = 2;System.out.println("before swap, a is: " + a + ", b is: " + b);swapnum(a, b);System.out.println("after swap, a is: " + a + ", b is: " + b);Person p = new Person("zhangsan", 15);System.out.println("\nbefore change, person is: ");p.printp();p.changeattr(p, "lisi", 16);System.out.println("after change, person is: ");p.printp();}
}
将代码run起来以后,得到的结果为:
before swap, a is: 1, b is: 2
after swap, a is: 1, b is: 2before change, person is:
zhangsan, 15
after change, person is:
lisi, 16
简单总结起来就是:
1.如果传入的参数是基本数据类型,方法里的操作不会对原始值做改变。
2.如果传入的参数是一个对象或者数组或者接口等复杂类型,方法里的操作可以改变这个对象里面的具体内容,但是不会改变对象的内存地址。(如果方法里没做相应操作的话)
java中的值传递与引用传递相关推荐
- java引用传递106_(转载)java的值传递与引用传递
1 说明:本文的适用对象为java初学者.如果有读者发现文章中有叙述不妥之处,请指正.2 3 今天在论坛上有人提了一个关于java中调用函数时有没有引用传递的问题,可谓是吵的不可开交.有人说java只 ...
- Java 是值传递还是引用传递
最近整理面试题,整理到值传递.引用传递,到网上搜了一圈,争议很大.带着一脸蒙圈,线上线下查了好多资料.最终有所收获,所以分享给大家,希望能对你有所帮助. 首先说下我的感受,这个题目出的很好,但 ...
- Java中的值传递和引用传递
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为 ...
- Java中传参数--值传递和引用传递
** Java中传参数–值传递和引用传递 ** 在Java中,传参数分为值传递和引用传递. 在Java中的数据类型分为两大类:一类是引用类型,也叫类类型(除了String以外的所有复合数据类型,包括数 ...
- java中的值传递和引用传递问题
值传递与引用传递 最近学基础的时候,老师讲了值传递和引用传递,这个问题一直不太明白,上网查了很多资料,按照自己的理解整理了一遍,发现之前不太明白的地方基本上想明白了,如有不正确的地方,欢迎指正,谢谢. ...
- 【Java基础】Java中的值传递、引用传递
Java中的值传递.引用传递 对于一个方法而言,参数是为该方法提供信息的,而不是想让该方法改变自己.--<Java编程思想> 值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本 ...
- Java中值传递和引用传递原理以及区别
Java在参数传递时有两种:一种是按值传递,一种是按引用传递 值传递:值传递是指在调用方法时将实际参数复制一份传递到方法中,也就是说,在调用方法时,实际参数把他的值的副本传递给对应的形式参数.(注意这 ...
- Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...
<Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?> <Java中的值传递和引用传递> 原理知识: 如果参数类型是原始类型,那么传过来的就是这 ...
- 一文彻底搞懂Java中的值传递和引用传递!
关于Java中方法间的参数传递到底是怎样的.为什么很多人说Java只有值传递等问题,一直困惑着很多人,甚至我在面试的时候问过很多有丰富经验的开发者,他们也很难解释的很清楚. 我很久也写过一篇文章,我当 ...
- java 地址传递 返回值_Java中的值传递和引用传递
这几天一直再纠结这个问题,今天看了这篇文章有点思路了,这跟C++里函数参数为引用.指针还是有很大区别. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里 ...
最新文章
- 热潮下的冷思考,人工智能即将改变的三大领域
- 排查一般MySQL性能问题
- Centos 安装 NodeJS
- centos7和centos6的区别
- 统计学习笔记(2)——感知机模型
- ElementUI Container布局容器
- 编写python程序_如何进行Python程序的编写
- 用python庆祝生日_生日到底该过阴历还是阳历好呢?不是迷信,都怪我们大意!...
- python常用功能_python----常用功能
- xml文件中““符号报错,无法识别
- hive jdbc 访问 配置_Hive入门级教程(详细)
- 台湾半导体封测商南茂股东大会通过紫光24亿元入股案
- U盘插入电脑识别不出来,如何解决?
- lav点搜网metro风格分享
- 关于chm电子书无法显示网页的解决方
- 一个可以把Google Docs变成GDrive的工具
- 一个关于微信微信免费自动投票软件与专门投票的微信群的教程介绍
- VBA完整学习笔记1-39集(共60集)
- 大数据BI工具Tableau学习【第三期】:数据类型,功能区和卡参考,文件类型(连接方式)
- ime with the \acknowledge=true\ parameter:,watcher:[Watcher will be disabled