Java引用传递和值传递

来源:互联网 发布:淘宝摄影需要什么器材 编辑:程序博客网 时间:2024/06/05 01:54

Java值传递:
是针对Java基本类型(int等)数据的传递,在方法执行完以后,形参值的改变不会影响到实参的数据,这个没什么好说的。
Java引用传递:
首先需要明确一点,引用的含义,引用是个通用名词,在C++中表示变量的别名,而在Java中,引用类似于C++的指针,但又不太相同,因为Java的引用并不需要你自己去控制对象的使用周期,由于Jvm自带垃圾回收,所以该引用是是对象在jvm中的内存地址,Java为了避免出现内存泄露问题,出于安全性以及GC回收机制,也不允许对该变量进行自增操作,而是让Java程序直接使用该内存地址的内容,C++中的指针是可以的。
所以有很多人说,Java并没有引用传递,也是对的,只不过他们把此处的引用当做了C++的引用传递而已。
我们姑且在Java中传递地址的方式称为引用传递,那么Java到底是不是传递的地址呢,看示例。

public class User {    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}
public class Test {    public void set(User user){        user.setName("hello world");    }    public static void main(String[] args) {        Test test = new Test();        User user = new User();        test.set(user);        System.out.println(user.getName());    }}

上面代码的输出结果是“hello world”,这不必多说,那如果将set方法改为如下,结果会是多少呢?

public void set(User user){        user.setName("hello world");        user = new User();        user.setName("change");    }

答案依然是“hello world”,下面就让我们来分析一下如上代码。
首先

User user = new User();

是在堆中创建了一个对象,并在栈中创建了一个引用,此引用指向该对象,如下图:
这里写图片描述

test.set(user);

是将引用user作为参数传递到set方法,注意:这里传递的并不是引用本身,而是一个引用的拷贝。也就是说这时有两个引用(引用和引用的拷贝)同时指向堆中的对象,如下图:
这里写图片描述

user = new User();

在set()方法中,又创建了一个User对象,并将“user引用的拷贝”指向这个在堆中新创建的对象,如下图:
这里写图片描述

user.setName("change");

在set()方法中,“user引用的拷贝”操作的是堆中新创建的User对象。
这里写图片描述

System.out.println(user.getName());

set()方法执行完毕,目光再回到mian()方法,因为之前,”user引用的拷贝”已经将堆中的User对象的name属性设置为了”hello world”,所以当main()方法中的user调用getName()时,打印的结果就是”hello world”。如下图:
这里写图片描述
Java虚拟机体系结构

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新买的电脑应该怎么办 海尔一体机电脑开不开机怎么办 苹果笔记本系统坏了怎么办 苹果笔记本电脑电池坏了怎么办 苹果笔记本电脑屏幕坏了怎么办 平板开关键坏了怎么办 平板电脑电池坏了怎么办 平板电脑充电口坏了怎么办 平板电脑系统坏了怎么办 平板电脑充电器坏了怎么办 平板电脑触摸屏坏了怎么办 平板电脑关不了机怎么办 平板电脑触摸屏没反应怎么办 平板电脑声音太小怎么办 平板电脑频碎了怎么办? 淘宝直播展示频道排后怎么办 网店头像改不了怎么办 被骗了7500追不回来怎么办 steam中国版原来的游戏怎么办 老公买驾照被骗妻子应该怎么办 被淘密码骗了怎么办 逛街手机没电了怎么办 电脑登入密码忘了怎么办 晚上睡不好觉经常做梦怎么办 开淘宝店开始零销量怎么办 淘宝店开直通车后销量怎么办 淘宝直播一开始直播没人该怎么办 淘宝店铺访客数据下滑怎么办 2个ctrl键都失灵怎么办 淘宝上搜索不到很久以前订单怎么办 关键词找不到了是不是被降权怎么办 购买小程序关键词想退款怎么办? 浏览器审查元素不拆分关键词怎么办 拼多多商品想重新编辑怎么办 新开店铺没有销量怎么办 新开的店铺没有销量怎么办 淘宝的商品权重下降是怎么办 360n5手机耗电快怎么办 怪兽充电宝丢了怎么办 有已处置的评价怎么办 淘宝降权了怎么办2018