zoukankan      html  css  js  c++  java
  • 【转】java方法参数传递方式--按值传递、引用传递

    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中的过程可以用下图来表示:

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

    --------------------- 本文来自 zhenge1990 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zhenge1990/article/details/78897166?utm_source=copy 

  • 相关阅读:
    DEDECMS里面DEDE函数解析
    dede数据库类使用方法 $dsql
    DEDE数据库语句 DEDESQL命令批量替换 SQL执行语句
    织梦DedeCms网站更换域名后文章图片路径批量修改
    DSP using MATLAB 示例 Example3.12
    DSP using MATLAB 示例 Example3.11
    DSP using MATLAB 示例 Example3.10
    DSP using MATLAB 示例Example3.9
    DSP using MATLAB 示例Example3.8
    DSP using MATLAB 示例Example3.7
  • 原文地址:https://www.cnblogs.com/modou/p/9752816.html
Copyright © 2011-2022 走看看