zoukankan      html  css  js  c++  java
  • 关于Java方法的参数

    刚好看到C++的函数这块,说C++中除了引用类型的形参,其他都是实参的副本(个人总结)。

    隐约记得Java中方法的参数也是这么回事,于是手动测试一番。

    结果

    Java中方法的参数都是值传递,哪怕是引用类型,传递的也是引用本身的副本(指向同一个对象)。

    个人以为,将Java中的引用类型的变量看作指针更容易理解。

    测试代码

    import org.junit.Test;
    
    public class TestFunction {
    
        @Test
        public void testInt(){
            int a = 3;
            int b = 4;
            swap(a, b);
            System.out.println(a + "---" + b);
        }
    
        @Test
        public void testString(){
            String a = "hehe";
            String b = "what";
            swap(a, b);
            System.out.println(a + "---" + b);
        }
    
        @Test
        public void testInner(){
            Inner a=new Inner();
            a.setAge(10);
            Inner b=new Inner();
            b.setAge(20);
    
            swap(a,b);
            System.out.println(a.getAge() + "---" + b.getAge());
    
        }
    
        /**
         * 基本类型,是值传递,所以不会修改原对象
         *
         * @param a
         * @param b
         */
        public void swap(int a, int b){
            a += b;
            b = a - b;
            a -= b;
        }
    
        /**
         * 字符串也是值传递
         * @param a
         * @param b
         */
        public void swap(String a, String b){
            String tmp = a;
            a = b;
            b = tmp;
        }
    
        /**
         * 引用,传递的也是引用本身,类似地址。所以只是副本,不会影响原值。
         * @param a
         * @param b
         */
        public void swap(Inner a, Inner b){
            Inner tmp=a;
            a=b;
            b=tmp;
        }
    
        /**
         * inner class
         */
        class Inner{
            private int age;
            public void setAge(int age){
                this.age=age;
            }
            public int getAge(){
                return this.age;
            }
        }
    }

    补充

    绝大多数时候,我们使用的都是传入对象(引用类型)的成员,所以不会涉及这个问题。因为引用的副本仍然指向同一个对象。

  • 相关阅读:
    websocket协议
    vue组件之间的传值
    vue中非父子组件的传值bus的使用
    $.proxy的使用
    弹性盒模型display:flex
    箭头函数与普通函数的区别
    粘贴到Excel的图片总是有些轻微变形
    centos rhel 中文输入法的安装
    vi ,默认为 .asm .inc 采用nasm的语法高亮
    how-to-convert-ppk-key-to-openssh-key-under-linux
  • 原文地址:https://www.cnblogs.com/larryzeal/p/5583054.html
Copyright © 2011-2022 走看看