• 值传递和引用传递


      java应用程序有且只有一种参数传递机制,即按值传递。

      按值传递:当将一个参数传递给一个函数的时候,函数接收的是原始值的一个副本,因此,如果函数修改了该参数,仅仅修改的是参数的副本,而原始值保持不变。按引用传递一位置当一个参数传递给一个函数的时候,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。

      1.对象是按照引用传递;

      2.java中仅存在一种参数传递机制,即按值传递;

      3.按值传递意味着当一个参数传递给一个函数的时候,函数接收的是原始值的一个副本;

      4.按引用传递意味着当将一个参数传递给一个函数的时候,函数接收的是原始值的内存地址,而不是值的副本。

    1.引用传递的例子

    package PassTest;
    
    public class Test1
    {
    	public static void main(String[] args)
    	{
    		StringBuffer s1 = new StringBuffer("good");
    		StringBuffer s2 = s1;
    		s2.append(" afternoon.");
    		System.out.println(s1);
    	}
    
    }
    

    输出结果:

    good afternoon.
    

      对象s1和s2都指向内存中的同一个地址,则指向的是同一个对象。虽然这里看做的是“引用传递”,

      但引用传递其实也是传值,因为对象就是一个指针,这个赋值是在指针之间的赋值,因此在java中将它称为传引用。

      

    2.值传递的例子

    package PassTest;
    
    public class Test2 
    {
    	public static void main(String[] args)
    	{
    		int i1 = 5;
    		int i2 = i1;
    		i2 = 6;
    		System.out.println(i1);
    	}
    
    }
    

    输出结果:

    5
    

      由于i1和i2是原始数据类型,而原始数据类型是按值传递,所以修改的其实只是原始值的一个副本,原始值并不会改变。

    package PassTest;
    
    public class Test3 
    {
    	public static void main(String[] args)
    	{
    		StringBuffer s1 = new StringBuffer("good");
    		StringBuffer s2 = new StringBuffer("bad");
    		test(s1, s2);
    		System.out.println(s1);//9
    		System.out.println(s2);//10
    	}
    	
    	static void test(StringBuffer s1, StringBuffer s2)
    	{
    		System.out.println(s1);//1
    		System.out.println(s2);//2
    		s2 = s1;//3
    		s1 = new StringBuffer("new");//4
    		System.out.println(s1);//5
    		System.out.println(s2);//6
    		s1.append("haha");//7
    		s2.append("haha");//8
    	}
    
    }
    

    输出结果:

    good
    bad
    new
    good
    goodhaha
    bad
    

    分析:

      1和2比较容易明白,3使得s2指向s1,这时候s2指向的值为“good”,而4使得s指向“new”,所以在5和6的时候输出的结果是new和good。而7使得new变为了newhaha,8使得good变成了goodhaha。再看9和10,此时由于9中的s对应的是good,在test函数中被修改为了goodhaha,所以输出了goodhaha,而10中的s2指向的bad在test函数中并没有被改变,所以输出的是bad。

  • 相关阅读:
    Yii2 高级模板不使用Apache配置目录,将前后台入口移到根目录
    物理路径,相对路径,绝对路径以及根目录
    其他ip无法访问Yii的gii,配置ip就可以
    move_uploaded_file() 函数
    DetailView内匿名函数不可用
    instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例 , 返回true或者false
    php 判断变量函数
    [HNOI2008] GT考试
    [Bzoj1006][HNOI2008]神奇的国度
    [BZOJ 1005] 明明的烦恼
  • 原文地址:https://www.cnblogs.com/Mr24/p/6752607.html
Copyright © 2020-2023  润新知