博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中的值传递和引用传递
阅读量:6179 次
发布时间:2019-06-21

本文共 1291 字,大约阅读时间需要 4 分钟。

public class Test3 {    public static void change(int a){        a=50;    }    public static void main(String[] args) {        int a=10;        System.out.println(a);        change(a);        System.out.println(a);    }} 输出的 是10,10。main方法中将a传递给change方法,change方法中会对传递过来的参数进行copy,所以change中的a是实参复制出来的一个变量。change中的a的改变与实参无关。
public class Test3 {    public static void change(int []a){        a[0]=50;    }    public static void main(String[] args) {        int []a={10,20};        System.out.println(a[0]);        change(a);        System.out.println(a[0]);    }} 输出结果为10   50。实际传递的是引用的地址值。形参获取到实参所指向的地址的指针。改变形参的值相当于改变实参指向地址的值,所以实参指向的值会改变。
class Emp {    public int age;}public class Test {    public static void change(Emp emp)    {        emp.age = 50;        emp = new Emp();//再创建一个对象        emp.age=100;    }        public static void main(String[] args) {        Emp emp = new Emp();        emp.age = 100;        System.out.println(emp.age);        change(emp);        System.out.println(emp.age);        System.out.println(emp.age);    }}

输出为:100  50  50.

首先,方法中改变了对象的值,所以age为50,然后创建了一个新的对象,新的对象的指针放在了emp里。这时的emp和传递过来的emp所指向的地址不同了。最后设置age为100,是对新建的Emp对象的设置。也就是说,后来新建的emp相当于change方法中的私有变量,作用域只在change方法里。而传递过来的emp的指针是不会改变的。所以打印的emp是实参指向的空间。

转载于:https://www.cnblogs.com/BlingSun/p/7485355.html

你可能感兴趣的文章
使用vc+如何添加特殊字符的控件(创世纪篇)
查看>>
Linux下的常用信号
查看>>
3.UIImageView+category
查看>>
2.UIView+category
查看>>
Android ImageLoader使用
查看>>
LDTP
查看>>
StringUtils工具类的常用方法
查看>>
linux下VNC安装与配置
查看>>
URL编码
查看>>
光模块及光纤知识(含分类,常用类型介绍)
查看>>
Apache 单IP多端口设置
查看>>
安装系统前的准备---vmware
查看>>
Tiny并行计算框架之使用介绍
查看>>
Linux od命令
查看>>
一个不错的MySQL集群管理工具
查看>>
mysql-proxy 按表分发查询的lua脚本
查看>>
在wordpress主题下面添加二级菜单
查看>>
CentOS 下JDK安装
查看>>
Nginx + Django
查看>>
我的友情链接
查看>>