zoukankan      html  css  js  c++  java
  • 参数传对象即传引用

    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对象的属性值。说明二者操作的是同样的内存空间。

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

  • 相关阅读:
    SublimeText3激活
    Mysql数据备份
    supervisor介绍与使用
    spark-submit介绍
    Spark之spark.sql
    MarkDown编写方法
    Nginx配置多级代理后获取用户真实IP
    Hive之UDF解释
    Hive之分组取前几条记录
    Hive之Map和Reduce的优化
  • 原文地址:https://www.cnblogs.com/lvlang/p/10586426.html
Copyright © 2011-2022 走看看