• Java中的值传递机制


    8. 请你解释什么是java的值传递机制?

    变量的赋值
    /*
     *
     * 关于变量的赋值:
     *
     *  如果变量是基本数据类型,此时赋值的是变量所保存的数据值。
     *  如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值。
     *
     */
    public class ValueTransferTest {
    
        public static void main(String[] args) {
    
            System.out.println("***********基本数据类型:****************");
            int m = 10;
            int n = m;
    
            System.out.println("m = " + m + ", n = " + n);
    
            n = 20;
    
            System.out.println("m = " + m + ", n = " + n);
    
            System.out.println("***********引用数据类型:****************");
    
            Order o1 = new Order();
            o1.orderId = 1001;
    
            Order o2 = o1;//赋值以后,o1和o2的地址值相同,都指向了堆空间中同一个对象实体。
    
            System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId);
    
            o2.orderId = 1002;
    
            System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId);
    
        }
    
    }
    
    class Order{
    
        int orderId;
    
    }
    
    输出结果:
    
    ***********基本数据类型:****************
    m = 10, n = 10
    m = 10, n = 20
    ***********引用数据类型:****************
    o1.orderId = 1001,o2.orderId = 1001
    o1.orderId = 1002,o2.orderId = 1002
    

    参数是基本类型
    /*
     * 方法的形参的传递机制:值传递
     * 
     * 1.形参:方法定义时,声明的小括号内的参数
     *   实参:方法调用时,实际传递给形参的数据
     * 
     * 2.值传递机制:
     * 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值。
     * 如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。
     * 
     */
    public class ValueTransferTest1 {
    	public static void main(String[] args) {
    		
    		int m = 10;
    		int n = 20;
    		
    		System.out.println("m = " + m + ", n = " + n);
    		//交换两个变量的值的操作
    //		int temp = m ;
    //		m = n;
    //		n = temp;
    		
    		ValueTransferTest1 test = new ValueTransferTest1();
    		test.swap(m, n);
    		
    		System.out.println("m = " + m + ", n = " + n);
    		
    		
    	}
    	
    	
    	public void swap(int m,int n){
    		int temp = m ;
    		m = n;
    		n = temp;
    	}
    }
    
    输出结果:
    m = 10, n = 20
    m = 10, n = 20
    
    分析:
          swap方法执行之后,会弹出栈,调用swap方法后面的输出语句,输出的是main方法中的m、n的值,
    

    参数是引用类型:此时实参赋给形参的是实参存储数据的地址值。
    public class ValueTransferTest2 {
    	
    	public static void main(String[] args) {
    		
    		Data data = new Data();
    		
    		data.m = 10;
    		data.n = 20;
    		
    		System.out.println("m = " + data.m + ", n = " + data.n);
    		
    		//交换m和n的值
    //		int temp = data.m;
    //		data.m = data.n;
    //		data.n = temp;
    		
    		ValueTransferTest2 test = new ValueTransferTest2();
    		test.swap(data);
    		
    		
    		System.out.println("m = " + data.m + ", n = " + data.n);
    		
    	}
    	
    	public void swap(Data data){
    		int temp = data.m;
    		data.m = data.n;
    		data.n = temp;
    	}
    	
    }
    
    class Data{
    	
    	int m;
    	int n;
    	
    }
    
    输出结果:
              m = 10, n = 20
              m = 20, n = 10
    

  • 相关阅读:
    【Q&A】pytorch中的worker如何工作的
    【教程】opencv-python+yolov3实现目标检测
    ubuntu使用scrcpy手机投屏-免费神器scrcpy【介绍、安装、使用】
    【从踩坑到教程】win10下ubuntu18.04双系统UEFI模式安装、Nvidia驱动安装
    Python引用与目录结构
    交流总结
    转载-趣图展现程序员职业生涯的11个阶段
    转载-在家工作,10招助你效率、生活两不误
    转载-新年寄望:从小做起,活在当下
    转载-成为明星程序员的10个提示
  • 原文地址:https://www.cnblogs.com/ITHSZ/p/13860873.html
Copyright © 2020-2023  润新知