zoukankan      html  css  js  c++  java
  • 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
    
    

    练习:

    public class TransferTest3 {
          public static void main(String args[]) {
                TransferTest3 test = new TransferTest3();
                test.first();
          }
          public void first() {
                int i = 5;
                Value v = new Value();
                v.i = 25;
                second(v, i);
                System.out.println(v.i);
          }
          public void second(Value v, int i) {
                i = 0;
                v.i = 20;
                Value val = new Value();
                v = val;
                System.out.println(v.i + " " + i);
          } 
    }
    
    class Value {
          int i = 15;
    }
    
    输出结果:
          15 0 20
    

  • 相关阅读:
    SAP接口编程 之 JCo3.0系列(03) : Table参数
    SAP接口编程 之 JCo3.0系列(01):JCoDestination
    SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming
    ORACLE SQL 分组
    Win10无法安装提示磁盘布局不受UEFI固件支持怎样解决
    win10系统更新补丁时进度条一直卡在0%不动的解决方案
    SAP 批量查看凭证更改记录
    Oracle 中取当前日期的上个月最后天和第一天
    table 谷歌下不出现滚动条
    style.display table-row与block
  • 原文地址:https://www.cnblogs.com/ITHSZ/p/13223201.html
Copyright © 2011-2022 走看看