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

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

  • 相关阅读:
    hdu 3342 Legal or Not 拓排序
    hdu 1596 find the safest road Dijkstra
    hdu 1874 畅通工程续 Dijkstra
    poj 2676 sudoku dfs
    poj 2251 BFS
    poj Prime Path BFS
    poj 3278 BFS
    poj 2387 Dijkstra 模板
    poj 3083 DFS 和BFS
    poj 1062 昂贵的聘礼 dijkstra
  • 原文地址:https://www.cnblogs.com/lvlang/p/10586426.html
Copyright © 2011-2022 走看看