java方法参数传递方式--按值传递、引用传递

来源:互联网 发布:贝思外贸软件数据导出 编辑:程序博客网 时间:2024/04/30 10:27

java的方法参数传递方式有两种,按值传递和引用传递


1.按值传递

参数类型是int,long等基本数据类型(八大基本数据类型),参数传递的过程采用值拷贝的方式


代码片段1:

public class Test {    public static void main(String[] args) {        int a = 5;        fun(a);        System.out.println(a);// 输出结果为5    }    private static void fun(int a) {        a += 1;    }}

2.引用传递

参数类型为引用类型,参数传递的过程采用拷贝引用的方式


代码片段2:

public class Test {    public static void main(String[] args) {        A a = new A(5);        fun(a);        System.out.println(a.a);// 输出结果为6    }    private static void fun(A a) {        a.a += 1;    }    static class A {        public int a;        public A(int a) {            this.a = a;        }    }}

结论:按值传递,不会改变原来的值,引用传递,会改变引用对象的值


再看下面这种情况:

代码片段3:

public class Test {    public static void main(String[] args) {        Integer a = 5;        fun(a);        System.out.println(a);// 输出结果为5    }    private static void fun(Integer a) {        a += 1;    }}

这里明明是引用传递,为什么没有改变对象的值呢?

这里其实使用了基本数据类型封装类的自动装箱功能。

Integer a = 5,编译后实际为Integer a = Integer.valueOf(5),查看Integer的源码,并没有改变原对象的值,只是将其引用指向了另一个对象。


代码片段3中的过程可以用下图来表示:


直接改变了栈帧中的地址,指向另一个对象,所以并没有改变原来的值。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 好爱你 我爱的是你爱我歌曲 你爱我什么 爱存在 爱在飞翔 爱在身边 你不知道我有多爱你 闭嘴爱吧 爱看书吧网 爱看吧 放过朕吧爱卿们viwing 我爱原味吧 爱卿们放过朕吧 爱读书吧 和老外交爱一定很舒服吧 你说吧爱渐渐放下会走更远 爱我吧苏东坡 爱也罢恨也罢算了吧 冷穆爱我吧 这一刻爱吧 天天爱消除吧 爱看书吧8网站 爱宅吧 爱同吧 我们爱龟吧 我们爱过吗只是睡过吧 爱吧app 爱吧导航 去爱吧 爱吧夫妻 爱我吧 爱吧网站 宝石爱吧 爱吧成人用品 爱吧社区 这一刻 爱吧 爱吧夫妻网 第四爱吧 这就是爱吧 这一次爱吧 大胆爱吧