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

    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;
    	}
    
    }
    
    

    运行结果:

    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 的值
    		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;
    }
    

    运行结果:

  • 相关阅读:
    正则表达式学习笔记(3)字符类
    一个Service/Functional/Persistence的简单框架
    在Visual Studio 2008环境下安装Boost
    你需要掌握的三种编程语言
    abstract、virtual、override 和 new
    WINCE下编译STLPort
    VS2008环境下编译使用SGI STL(using stlport 5.2.1)
    QT For WinCE, Visual Studio 2008环境的搭建
    VC6.0、VS2005、VS2008安装STLport5.2.1
    Ubuntu 11.10 安装nginx+php5+mysql 的web服务器
  • 原文地址:https://www.cnblogs.com/klvchen/p/14330372.html
Copyright © 2011-2022 走看看