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

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

  • 相关阅读:
    【天梯 L2-008 最长对称子串 】 最长回文子串 manacher
    【天梯L2-001 城市间紧急救援】 双关键字最短路+记录路径 堆优化Dijkstra
    记录板

    留言板
    使用 Docker 搭建 Java Web 运行环境(转)
    数据库隔离级别和锁
    线程上下文类加载
    tomcat是怎么找到项目lib目录下的jar包的,求大神解答
    Java中try、finally语句中有return时的执行情况 [转]
  • 原文地址:https://www.cnblogs.com/lvlang/p/10586426.html
Copyright © 2011-2022 走看看