[Java的] 在Java中排列功能 – 掉在Java中

功能交换的实现 (换 – 转变) 在java中它是从C / C 或Pascal有所不同,… 要改变变量的值了功能,你必须使用对象. 您可以参考 2 下面VD交换内容,那么,如果你想阅读下面或者如果你发现它混淆阅读代码,请阅读下面先解释细节,然后再回到代码.

VD1: 使用对象

package VietSource.net.temp;

import java.util.Scanner;

class Number {				// lop Number
	int num;

	public Number(int num) {		// ham khoi tao
		this.num = num;
	}

	public int getNum() {			// ham tra ve gia tri num
		return num;
	}

	public void setNum(int num) {	// ham set gia tri num
		this.num = num;
	}
}

public class MySwap {
	private void swap(Number a, Number b) {		// ham hoan vi
		int temp = a.getNum();					// gan num cua a cho temp
		a.setNum(b.getNum());					// gan num cua b cho a
		b.setNum(temp);							// gan temp cho num cua b
	}

	public static void main(String[] args) {
		Number a, b;								// hai doi tuong Number a va b
		MySwap sw = new MySwap();					// doi tuong sw thuoc lop MySwap
		Scanner scan = new Scanner(System.in);

		System.out.print("Nhap a = ");
		a = new Number(scan.nextInt()); 			// khoi tao a voi num la so nhap vao
		System.out.print("Nhap b = ");
		b = new Number(scan.nextInt()); 			// khoi tao b voi num la so nhap vao
		scan.close();
		System.out.println("Befor swap: a = " + a.getNum() + " b = " + b.getNum());
		sw.swap(a, b);								// su dung ham swap
		System.out.println("After swap: a = " + a.getNum() + " b = " + b.getNum());
	}
}

首席执行官 2 用最后一段 (物质也是对象阵列)

package VietSource.net.temp;

import java.util.Scanner;

public class SwapArray {
	private void swapArray(int arr[], int i, int j){
		int temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}
	
	public static void main(String[] args) {
		SwapArray sw = new SwapArray();
		Scanner scan = new Scanner(System.in);
		int arr[] = new int[2];
		
		System.out.print("Nhap a = ");
		arr[0] = scan.nextInt();
		System.out.print("Nhap b = ");
		arr[1] = scan.nextInt(); 
		
		System.out.println("Befor swap: a = " + arr[0] + " b = " + arr[1]);
		sw.swapArray(arr, 0, 1);
		System.out.println("After swap: a = " + arr[0] + " b = " + arr[1]);
		
		scan.close();
	}
}

困难之一 (与争议) 对于C 程序员Java编程的传递由值或
传递按引用. 例:

Object a = new Object("Object A"); //kỳ quặc với C++: Object* a = new ...
Object b = a;
b.setNewName("Object B");

根据C 对象B的开发者的理解显然更改名称无关,反对一个整体. 实际上,根据不同的Java, 对象将有一个名为“对象B”就像对象B均. 为对象B完全“独立”的对象: 对象B = a.clone();

但功能互换() 爪哇以这样的方式来操作传递按引用.

private void swap(Type arg1, Type arg2) {
	Type temp = arg1;
	arg1 = arg2;
	arg2 = temp;
}

因此,有!!! Java的究竟? 隐藏背后的争议采用迷宫等什么?

首先,有必要理解,通过噪声值由参数值的副本在一个“可变的”函数内用于传输. 所以,当函数返回时,它会破坏复制的参数, 和传递的参数不受影响变化. 相反,它是通过按引用实际上是一个别名,以创造真正的参数. 当参数含量的变化,这也直接改变传递的参数. 故障节省CPU与一个大对象后,使C 副本, 与复制/初始化复杂.
然而,在Java中的交换功能不起作用,因为它的工作的方式传递按值. 交换后,函数返回ARG1和arg2是不转边. 但奇怪的是,如果函数体交换调用改变对象类型的方法, 例如:: arg1.setValue(“变化”);

按照这种思维方式,在退出函数swap传递按值后ARG1不会改变. 现实的情况是不同的, ARG1所谓的setValue() 所以退出函数时,ARG1的值更改. 回想一下,在C有参考的概念 (&). 但有指针Ç (指针) 这让精通C的灵活性,而无需参考. Java没有指针? 许多人认为,: 目标是通过按引用也是原语传递按值 (在Java, 对象是按引用传递, 和原语是按值传递。) 该条款只对了一半. 反对清孔班派được传递按引用马拉对象引用được传递按值. 我们将知道答案:
在Java中回答上述所有的奇数是C,它的Java是“干净”的指针语法. Java有指针,但指针声明,并用了一个很干净. 当然,它但不是在C作为强指针,但它也“修复”的所有潜在的错误的和危险的 (铸件, 释放指针干草指针运算) 在C指针的.
在Java:
对象;

像C / C
对象一*;

因此,当
对象B = A;

指在C / C
对象* B = A; // b和a顷指针


b.setName(“对象B”);

等于
B->的setName(“对象B”);

所以b.setName(“对象B”) 也放置的对象“点”由一个名叫“对象B”为a和b指向同一个对象.

private void swap(Object a, Object b)
{
	Object temp = a;
	a = b;
	b = temp;
}

对应

void swap(Object* a, Object* b)
{
	Object* temp = a;
	a = b;
	b = temp;
}

显然,在C中此功能不起作用,除非这种变化:

void swap(Object* a, Object* b)
{
	Object temp = *a;
	*a = *b;
	*b = temp;
}

“光标”A和B都通过风格传递按值 (可以理解,Java是像C, 所有的参数传递的风格传递按值) 因此函数返回后互换, B保持不变或转让A = B无厘头. 但a.setValue(”…”) 光标所指的改变的对象.

参考:
http://javadude.com/articles/passbyvalue.htm
http://java.forumvi.net/t23-topic