令人困惑的值传递和引用传递
来源:互联网 发布:淘宝农村市场调研报告 编辑:程序博客网 时间:2024/06/03 09:02
对于学习java的同学来说,有一个比较容易让人困惑的问题,就是java中的参数的传递,可能大家都听到过各种的说法,比如有一种比较经典的说法就是基本数据类型是值传递的,引用数据类型是引用传递的。听起来好像很有道理,但是大家要牢记一点,就是java中只有值传递。
下面通过几个简单的代码例子来说明。
首先是简单的基本数据类型。
public class Main { public static void main(String[] args) { int a1 = 20; change(a1); System.out.println(a1); } private static void change(int a1) { // TODO Auto-generated method stub a1 = 200; }}
输出结果是20
这个好像比较好理解,就是基本数据类型作为方法的参数,传递的是基本数据类型的一个副本,方法中对于这个副本的改变不会影响到原来的变量的值。
下面是你引用数据类型
成员变量只有一个age
public class Person { int age =10;}
public class Main { public static void main(String[] args) { Person person = new Person(); change(person); System.out.println(person.age); } private static void change(Person person) { // TODO Auto-generated method stub person.age = 300;// person = new Person(); } private static void change(int a1) { // TODO Auto-generated method stub a1 = 200; }}
输出是300
public class Main { public static void main(String[] args) {// int a1 = 20;// change(a1);// System.out.println(a1); Person person = new Person(); change(person); System.out.println(person.age); } private static void change(Person person) { // TODO Auto-generated method stub // person.age = 300; person = new Person(); } private static void change(int a1) { // TODO Auto-generated method stub a1 = 200; }}
输出的是10
这是为什么呢?因为在将引用数据类型作为参数传递时候,同样传递是这个引用的副本。
当第一种方式进行修改引用指向的值的时候,将值从10改为300,这个时候,引用指向的值确实已经发生变化了。
当第二种方式,只是这个副本的引用指向的是另外一个变量的地址,原来的本尊却仍然指向原来的10,这样,输出的结果确实没有变化。
对于字符串来说,也是一个引用数据类型,同时它是一个final型的变量,这就导致他的值是不可变的,因此当把他作为参数传递的时候,总是将引用指向了另一个变量的内存地址,因此是输出的值是不会改变的。
public class Main { public static void main(String[] args) { String str = "abf"; change(str); System.out.println(str); } private static void change(String str) { // TODO Auto-generated method stub str = "glc"; }
输出结果是abf
0 0
- 令人困惑的值传递和引用传递
- 引用传递和值传递的区别
- Java的值传递和引用传递
- js的值传递和引用传递
- 值传递和引用传递的区别
- java的引用传递和值传递
- java的引用传递和值传递
- 值传递和引用传递的区别
- 值传递和引用传递的区别
- 值传递和引用传递的区别
- 函数的值传递和引用传递
- Java的引用传递和值传递
- 值传递和引用传递的区别
- 值传递和引用传递的区别
- php的值传递和引用传递
- python 的值传递和引用传递
- java的值传递和引用传递
- java的值传递和引用传递
- Unity中使用摇杆控制
- HDU 1241/UVa572 Oil Deposits(DFS&BFS)
- [bzoj2154]Crash的数字表格
- CentOS7.0下安装和配置zabbix2.4.5全过程及解决一些遇到的问题
- wave overfly
- 令人困惑的值传递和引用传递
- 解决webview调用 goBack() 返回上一页自动刷新闪白的情况
- 介绍一款神器:Xposed(附教程案例)
- 关于动态规划的一个精彩的入门文章(背包)
- 正确配置 Nginx + PHP
- RecyclerView再封装
- Linq to sql 分页
- iOS开发: 做真机测试时 遇到的 bitcode 的问题
- 关于recyclerView分隔线取巧