• 参数传对象即传引用


    Java中,参数定义为传递一个对象,那么传递进来的是对象的引用,或者说是句柄/对象的别名,其实跟C/C++里面这样的传递:void fun (int &a)是差不多的,而对象的引用/句柄可以理解为指向对象内存空间的一个指针/首地址。所以理所应当的若函数里面对传进来的对象的属性值做了修改的话,是会影响外面的对象的。

    下面是一个简单的示例:

    随便写一个类:A.java:

    /**
     * A.java
     * @author 吕浪
     * @My Email:784975698@qq.com
     * @Created on 2016年7月30日
     */
    package com;
    
    public class A {
    	private int a;
    	A()
    	{
    		a = 0;
    	}
    	public void set(int a)
    	{
    		this.a = a;
    	}
    	public int get()
    	{
    		return a;
    	}
    }
    

    然后主文件中利用一个函数对这个类的对象进行属性进行修改,看修改会不会反映到函数外面,TestForArgsPass.java:

    /**
     * TestForArgsPass.java
     * @author 吕浪
     * @My Email:784975698@qq.com
     * @Created on 2016年7月30日
     */
    package com;
    
    public class TestForArgsPass {
    	public static void modify(A obj)
    	{
    		obj.set(4);
    	}
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		A t1 = new A();
    		modify(t1);
    		System.out.println(t1.get());
    	}
    
    }
    

    运行程序得到的输出为4,所以说把对象t1传进了函数modify并做了属性值修改之后,同样影响了函数外头的t1对象的属性值。说明二者操作的是同样的内存空间。

    突然想到火影忍者里面也有类似的情节,卡卡西和带土大家都有空间穿越的功能,并且因为大家使用的是同一个人身上的写轮眼,所以大家进去的异空间是一样的……算了不扯了,总之函数传递对象参数进去时传递的是对象的引用,修改会影响源对象。

  • 相关阅读:
    AE旋转
    AE2
    AE1
    面试
    TS 基础数据类型
    vue-cli结构介绍
    js异步加载的5种方式
    slot 插槽的使用
    使用组件的细节点
    Vue 条件渲染
  • 原文地址:https://www.cnblogs.com/lvlang/p/10586426.html
Copyright © 2020-2023  润新知