methodspecial.java

来自「java基础教程以及代码 java base document and cod」· Java 代码 · 共 59 行

JAVA
59
字号
public class MethodSpecial
{
	public static void main(String [] args)
	{
		IntClass A=new IntClass(2);
		IntClass B=new IntClass(4);
		swap(A,B);
		System.out.println("A="+A.getNum());
		System.out.println("B="+B.getNum());
	}
	static void swap(IntClass i,IntClass j)
	{
		int k;
		k=i.getNum();
		i.setNum(j.getNum());
		j.setNum(k);
	}	
}

class IntClass
{
	public int x;
	public IntClass(int t) {x=t;}
	public int getNum() {return x;}
	public void setNum(int t) {x=t;}
}



/*

错误版本

public class MethodSpecial
{
	public static void main(String [] args)
	{
		Integer A=new Integer(2);
		Integer B=new Integer(4);
		swap(A,B);
		System.out.println("A="+A);
		System.out.println("B="+B);
	}
	static void swap(Integer i,Integer j)
	{
		Integer k;
		k=i; i=j; j=k;
	}	
}

我的理解是:
方法调用时,程序首先为形参分配一个空间,再把实参复制到形参中,形参和实参位于两个不同的内存空间,方法过程结束后,i的值并没有回传给A,所以A的值不变

而C++中,形参如果是指针,形参和实参指向同一个内存空间,所以i的值就是A的值

区别在于引用。在 C++ 中当传递给函数的参数是引用时,您传递的就是这个引用,或者内存地址(按引用传递)。在 Java 应用程序中,当对象引用是传递给方法的一个参数时,您传递的是该引用的一个副本(按值传递),而不是引用本身。

*/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?