zoukankan      html  css  js  c++  java
  • Java里方法的参数传递方式

    Java里方法的参数传递方式只有一种:值传递。

    Java中参数传递的都是参数值

    下面从两个维度来看

    1、传递的参数是8种基本数据类型

           这个比较好理解,8种基本数据类型,作为参数时,可以理解为原来的一个副本,作为方法内的局部变量,存储在方法栈中。

           副本值的改变,对原始值无任何影响。

    2、传递的参数是对象引用类型

           很多人可能有一个误解,认为java中对象作为参数时,传递的是引用,其实不然。

           在java中的设计模型中,一个对象可以拆分成两部分,一个是指向对象的变量名,一般存储在栈中,

           一个是真正的对象内容,存储在堆中。

          具体模型如下图:

          

         

       

          所以对象作为参数时,传递的也是值,只不过这个值有点特殊,是对象的引用地址,即栈内存里面的变量所指向的地址值

          附 代码demo

          

    /**
     * 描述 : 测试java中数据的传递
     *
     *
     * @Author : zhanghao
     * @Time  : 2019/12/19 18:31
     */
    public class Test {
    
        public static void main(String[] args) {
            Test test=new Test();
    
            //1、测试基本数据类型
            int basicVal=1;
            System.out.println("参数前 basicVal:"+basicVal);
            test.basicDataTypeParam(basicVal);
            System.out.println("参数后 basicVal:"+basicVal);
    
            //2、测试引用类型参数
            Student stu=new Student("张三");
            System.out.println("参数前 stu.name:"+stu.getName());
            test.referDataTypeParam(stu);
            System.out.println("参数后 stu.name:"+stu.getName());
    
            //3、测试引用数组
            Integer[] arrInt=new Integer[10];
            arrInt[0]=123;
            System.out.println("参数前 arrInt.length:"+arrInt.length);
            System.out.println("参数前 arrInt[0]:"+arrInt[0]);
            test.referArrayParam(arrInt);
            System.out.println("参数后 arrInt.length:"+arrInt.length);
            System.out.println("参数后 arrInt[0]:"+arrInt[0]);
    
            //4、其它常用引用类型 如字符串 String
            String strVal="2008年,北京欢迎你";
            System.out.println("参数前 strVal:"+strVal);
            test.referStrParam(strVal);
            System.out.println("参数后 strVal:"+strVal);
    
    
        }
    
        /**
         * 测试字符串引用类型
         *
         *
         * @param strVal
         */
        private void referStrParam(String strVal) {
            strVal="2020年,北京欢迎你";
        }
    
        /**
         * 测试引用数组 同时改变参数值,并为参数重新赋值
         *
         * @param arrInt
         */
        private void referArrayParam(Integer[] arrInt) {
            arrInt[0]=456;
            arrInt=new Integer[20];
        }
    
        /**
         * 测试引用数据类型
         *
         * @param stu
         */
        private void referDataTypeParam(Student stu) {
            stu.setName("李四");
        }
    
        /**
         * 测试基本数据类型参数
         *
         * @param basicVal
         */
        private void basicDataTypeParam(int basicVal) {
            basicVal=2;
        }
    

      

    /**
     * 描述 :  学生类实体
     *
     * @Author : zhanghao
     * @Time  : 2019/12/21 19:22
     */
    public class Student {
        String name;
    
        public Student(String name){
            this.name=name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

      

      

  • 相关阅读:
    static,const,extern,以及全局常量
    ios开发之级联菜单(两个tableView实现)
    ios开发零散知识点总结
    ios开发static关键字的理解
    ios开发清除SDWebImage图片缓存
    python
    Scapy 伪造网络数据包
    LeetCode-73. Set Matrix Zeroes
    排序算法系列:Shell 排序算法
    Android中级第十一讲之MotionEvent的分发、拦截机制分析
  • 原文地址:https://www.cnblogs.com/xiohao/p/12078127.html
Copyright © 2011-2022 走看看